Style | StandardCards

Planet Interactive Fiction

Thursday, 21. August 2025

My So Called Interactive Fiction Life

Another Refactor Bites the Dust

Note: This is me writing again. I heard from some of you and I will save the info dumps for the repository under /docs/blog. Going forward, the blog will be the tumbled chaos of my own brain.We have another reveal, discovered when attempting to make a standard text

Note: This is me writing again. I heard from some of you and I will save the info dumps for the repository under /docs/blog. Going forward, the blog will be the tumbled chaos of my own brain.

We have another reveal, discovered when attempting to make a standard text service for a WebAssembly browser client. The interface in ISemanticEvent has a data property of type Record<string, unknown> and Typescript sometimes gets befuddled trying to convert that to an array of objects. This led to an initial refactor to change the type to any or unknown. That was very late last night. Today, I was thinking about it again, discussing it from the Desktop app without any direct knowledge of the project. I dropped some code and thoughts in and then mentioned, "what if the events were atomic?" and things got interesting.

This actually revealed a number of things:

  • the current event source, on replay, could be inaccurate if there were entity description changes.
  • without every event being atomic, the event source is not a "true event source".
  • this would make testing much simpler.
  • this would eliminate the querying interface of the world model and cut the cord in that tightly-coupled relationship.
  • any text service is just a report. no more need for translation from layer to layer.
  • events would be larger, but that's an acceptable outcome.
  • we would need to ensure properties could be values or functions, which is something we've been wrangling with all along.
  • we also had some legacy properties in ISemanticEvent that we can prune.

This is another top to bottom refactor that will touch nearly every file. I thought about doing a hybrid refactor, but this directly impacts my vision for dumb text services (read the events, organize the text by semantics, emit the text into a json object and send that to a client (browser or cli or whatever).

The weird part is removing the world model querying interface. That was something I thought was required, but with true atomic events, we have everything we need at the end of a turn.

Some of the questions I've gotten from the int-fiction forums will be added to unit tests, integration tests, or eventually what we're calling, story tests. Story tests seem to be needed to test complex capabilities, though it's possible atomic events will alleviate that as well.


I've also added to the wish list a full conversion to C#, but that's definitely coming after we have a few working games.

Wednesday, 20. August 2025

The People's Republic of Interactive Fiction

August meeting (online)

The Boston IF meetup for August will be Wednesday, August 27, 6:30 pm Eastern time. We will post the Google Meet link to the mailing list on the day of the meeting. It looks like some playing with code, lead by Josh, will be a topic, but we’ll reserve time for general chatting and other […]

The Boston IF meetup for August will be Wednesday, August 27, 6:30 pm Eastern time. We will post the Google Meet link to the mailing list on the day of the meeting.

It looks like some playing with code, lead by Josh, will be a topic, but we’ll reserve time for general chatting and other brief discussions, too.

Tuesday, 19. August 2025

Renga in Blue

Skatte Jagt (1982)

(Continued, more or less, from my previous post.) While the Sinclair ZX-80 and ZX-81 launched computing “for the people” in Denmark (and a battle with Commodore after), today’s game is from another one of those “hobbyists” separate from the mainstream: Henrik K. Jensen, writing on a Nascom kit computer. While the home origin of the […]

(Continued, more or less, from my previous post.)

While the Sinclair ZX-80 and ZX-81 launched computing “for the people” in Denmark (and a battle with Commodore after), today’s game is from another one of those “hobbyists” separate from the mainstream: Henrik K. Jensen, writing on a Nascom kit computer. While the home origin of the Nascom was the UK (just like the ZX-80) it managed to make inroads in both Denmark and Sweden.

NASCOM kit parts, from a video by GlassTTY. This forms in the end a “proper” computer, rather than something a little more skeletal like the KIM-1.

The “kit” aspect was a definite part of the experience which is part of what allowed the launch of the Nascom 1 in the UK (January 1978) to be at more or less half the price of competitors. However, it was still cheap even for the parts; in fact, it was too cheap, as it had “inadequate profit margins” which led to the company falling into receivership two years later, leading to it being taken over by the company Lucas. A pre-assembled Nascom did not come out until very late, 1981, with the Nascom 3, which was simply the Nascom 2 but now you didn’t have to solder. By this point the industry had already moved on.

However, that didn’t equate to cheap in Denmark! An an account of buying one in Denmark, circa 1979 notes it was 4481 DKK, “about two month’s salary”, and

… what you got was a keyboard, a circuit board and a number of plastic bags full of resistors, capacitors and integrated circuits.

Yes! You had to build it yourself.

And you have to supply your own power supply (+5V,+12V,-5V,-12V (expensive!)), and a monitor or television for screen. Not to mention a box.

Then came the fun of finding the correct place for all the components and soldering them into place.

1839 component pins!!

I wonder if anyone ever got it to work on the first try.

Enough Danes figured it out that a club was kicked off in late 1979 with a newsletter. 18 members are listed in the second newsletter, and by 1982 the list reached hundreds (note not “thousands” like the ZX80/81 club in the UK had).

Half an “invader” graphic from the October 1980 issue.

Just like most clubs at the time, there was a “library” of software for members; March 1982 includes a mention of “Skattejagt” (“Treasure Hunt”) as entry B13:

This is not today’s game! In fact, you’ve seen this game before; a catalog that includes up to the end of 1982 gives a fuller description:

You are hunting for treasure that a pirate has hidden in an underground cave system, where secret passages open and close during the game.

This is Chaffee’s Quest, a game we’ve now seen translated into Dutch (twice) based on source code from the July 1979 issue of Byte. It landed in Danish too and probably more languages we haven’t unearthed.

The game we’re instead concerned about is only listed in the later catalog, meaning it first appeared in 1982; prior to my research today’s game only had a date of 19xx.

The program requires 48K and is in machine code; the computer is turned into a robot that you give commands to like “go north”, “take shovel”, and “build ladder”. It “demands a lot of imagination and patience, and it can take a while to find the treasures.”

The catalog states “Adventure” but the title screen of the game itself gives Skatte Jagt, so despite the clash with Chaffee I’m sticking with the more distinctive name.

The instructions mention “tag skovl” (take shovel) and “gaa nord” (go north) but notice it does not mention “lav stige” (build ladder) like the user group catalog does. (Ladder supplies get loaded on the player quickly enough I was quite suspicious, but it’s still good to have the exact phrasing in Danish.) Nord, syd, oest, vest, op, ned are the words for north, south, east, west, up, and down.

I’m in a cottage with a hole in the floor. I can see: stairs, locked door, door, hatch, hatch. I can go: east, up.

I typed hjaelp (help) right away:

For at laase en doer/lem op skriv aaben.
Skatte I igger ofte nedgravet.
Det er en god ide at undersoege alle ting.

To open a door/hatch, put “open”.
Treasures are often buried underground.
It is a good idea to investigate everything.

Incidentally, Danish uses special characters (å, æ, ø) and there is a version of the Nascom system that allows for them, but this one flattens things, so “åben dør” is “aaben doer”. ø is still used once in the game but I think it’s just the “zero” symbol.

Based on the help messages and my experimentation the verbs I’ve found are

tag (take), gaa (go), lave (build), laeg (drop), grave (dig), undersoeg (examine), and aaben (open)

although only the first three letters are needed of each (so it’s useful to “und” all the nouns). “Aab” is particularly quirky as you’ll see in a moment. I didn’t say “I started the game by dumping the verb list, like I normally do with languages I’m not good at”, and that’s not because of being a Danish master, but because after heavy searching through the machine-code file I can’t find where the verbs are stored. I imagine they’re broken up somehow. The upshot is that I’m not done with the game yet:

Heading up via “gaa op” (up the stairs one of the two hatches, or both?) there is an attic with a “rode kasse” (red box). You might think that the verb “aaben” would come into use here, but instead the game wants you to examine the box, which contains a second smaller box. Then examining the smaller box reveals some keys (noegler, or nøgler if special characters were being used).

Jeg er paa er loft. Jeg kan se: Noegler. Lille aeske. Rode kasse. lem. Mulige udgange: ned

I am in an attic. I can see: keys, little box, red box, hatch. I can go: down.

With the keys in hand (“tag noe”) you can then go downstairs to unlock the locked door, and I struggled for a while since no variation of “unlock door” or “open door” worked. I finally hit upon “open” alone. That’s what the help is supposed to indicate, and maybe it’s clearer in Danish, but I was mentally translating that as it requiring a noun, plus it’s common for a separate verb to do the door-unlocking as opposed to the keys being passively used while held.

The unlocked door leads to a kitchen (with a kitchen cabinet that seemingly has nothing) and another door leading further on into darkness. I don’t have any way through the darkness.

This is despite just outside seemingly having a solution:

This is a “courtyard” (or maybe “farmyard”) with a stone trough. Searching the trough reveals a box of matches, but nothing I’ve tried has let me light a match, so the darkness has to be left behind for now. (Sometimes adventure games don’t let you light a match by itself; the matches are just a tool for lighting a lamp. I haven’t found one of those either, though.)

The most fun way I’ve found to do vocabulary is to search on Google Images. This 1895 picture by Fritz Syberg (“An Old Farmyard”) came up looking at the word “gaardsplads”.

To the south is a “graesmark” (meadow) but nothing seems to be there (other than “looping” exits to make it seem bigger than it is) so let’s head north instead.

There’s a branching path with a locked hatch and a shed at the end. (Or rather “udhus”, a literal “out-building”, which could be an “outhouse” except there’s enough stuff inside the game clearly is meaning a shed.)

L. A. Ring from 1907, “Gammelt udhus”. Gammelt is “old”.

Inside there’s a shovel, oil barrel (with hammer), stack of boards, saw, rake, and hoe. Those boards and saw and hammer make it tempting to start building a ladder right away but the game says we’re missing something (I assume nails). The shovel, though, can be taken out right away for some digging, and here the game gets interesting in a ludology sense.

Crystal Cave (1977) modified the original Adventure source to start the game with a cave that had “treasures” that were all breakable formations, and park ranger that would kick you out if you caused too much havoc; essentially, a satire of cave-delving that imagined what things really would be like for a treasure-hunter in the real world. In the real world, if you start digging at random, you might find a rusty iron or an old beer bottlecap; such is the same here.

That’s a zero, right? Also this is the beer bottlecap.

I would guess, just like Crystal Caves, we’ll eventually break down to a lower layer with the real treasures.

Digging also reveals a stump in the forest, but I haven’t been able to do anything useful with it; no treasures have revealed themselves. Other than the dig-fest, the north part of the map has a locked hatch leading down to darkness (again, no light) and also what’s just a big hole.

Jeg er ved et huli jorden. Jeg kan se: . Mulige udgange: nord

I am at a hole in the ground. I can see: . I can go: north

(I assume this is where the ladder gets used.)

If anyone wants to take a shot at the game, directions for getting and playing it are here; all I really want is a verb list, if I’m stuck on an actual puzzle I don’t want to hear about it yet.


My So Called Interactive Fiction Life

Announcing Sharpee v1.0.0-alpha.1

By Claude Opus 4.1 and David CornelsonToday marks an important milestone in the Sharpee project as we release our first alpha version. After months of careful architecture design and implementation, we're ready to share our vision for a modern, Typescript-based interactive fiction platform.Why Sharpee?Interactive
Announcing Sharpee v1.0.0-alpha.1

By Claude Opus 4.1 and David Cornelson

Today marks an important milestone in the Sharpee project as we release our first alpha version. After months of careful architecture design and implementation, we're ready to share our vision for a modern, Typescript-based interactive fiction platform.

Why Sharpee?

Interactive fiction has a rich history spanning decades, from Zork to modern narrative games. Yet many IF development tools still reflect design decisions from the 1980s and 90s. Sharpee re-imagines interactive fiction development with modern software engineering principles:

  • Type Safety First: Full Typescript implementation catches errors at compile time.
  • Event-Driven Architecture: Every game state change is an immutable event, enabling features like unlimited undo/redo.
  • Extensible by Design: Add magic systems, combat, economics, or any mechanic through clean plugin interfaces.
  • Test-Driven Development: 2,700+ tests ensure reliability
  • Text Service: queries world model and event source to report game state. Authors can can create their own Text Service for any type of client.

What's in Alpha 1?

This release establishes the core foundation:

The Engine

Our event-sourced architecture treats every game action as an immutable event. This isn't just a technical detail—it fundamentally changes what's possible. Perfect save/restore, replay systems, and debugging tools all become trivial when your entire game history is a sequence of events.

The World Model

Entities in Sharpee aren't just objects with properties. They're compositions of traits and behaviors that interact dynamically. A mirror isn't hardcoded to be reflective—it has a mirror trait that provides that behavior. This composability means you can create entirely new types of objects without touching the core engine.

Natural Language Understanding

Our semantic parser doesn't just match patterns—it understands intent. "Take the red ball" and "pick up the crimson sphere" can resolve to the same action because the parser works with meaning, not just syntax.

The Standard Library

We've implemented 40+ standard actions that form the vocabulary of interactive fiction: take, drop, examine, go, open, close, wear, eat, and many more. Each action follows our validate/execute pattern, ensuring consistent behavior across the system.

A Different Approach

Sharpee takes some unconventional approaches that we believe will pay dividends:

Separation of Concerns: The physical world model is completely separate from meta-game features like scoring or saving. This clean separation makes the code base easier to understand and extend.

No Global State: Everything flows through events. There's no hidden state to worry about, no globals to accidentally mutate. This makes Sharpee games inherently more predictable and debuggable.

Extension-First Design: Rather than building every possible feature into the core, we've created a powerful extension system.

The Road Ahead

This alpha release is just the beginning. We're working on:

  • The Forge API: A fluent, author-friendly API for creating games without diving into Typescript.
  • Story Showcases: Completing our potential IF Comp 2025 - Reflections story and rebuilding sample stories like Cloak of Darkness.
  • Platform Expansion: Web and Electron clients for broader reach.
  • Visual Tools: VS Code Plugin for syntax highlighting and compile/test features.

For Early Adopters

If you're technically inclined and interested in the future of interactive fiction, we'd love your feedback on this alpha. The architecture is stable, the tests are passing, and the extension system is ready for experimentation.

Some ideas to try:

  • Port a classic IF game to see how Sharpee handles it.
  • Create an extension for your favorite game mechanic.
  • Stress-test the parser with complex commands.
  • Build a small story to explore the authoring experience.

A Personal Note

Interactive fiction has always been about pushing boundaries—not just in storytelling, but in what's technically possible with text. With Sharpee, we're trying to push those boundaries again, bringing modern engineering practices to a beloved genre.

This alpha release represents thousands of hours of design, development, and testing. It's built on lessons learned from decades of IF development, but it's not afraid to challenge conventional wisdom when we believe there's a better way.

Get Started

Ready to explore? Check out:

  • [GitHub Repository](https://github.com/ChicagoDave/sharpee)
  • [Release Notes](https://github.com/ChicagoDave/sharpee/releases/tag/v1.0.0-alpha.1)
  • [Documentation](https://github.com/ChicagoDave/sharpee/tree/main/docs)

We're excited to see what the interactive fiction community will build with Sharpee. The foundation is solid, the architecture is clean, and the possibilities are endless.

Welcome to the future of interactive fiction development.

David Cornelson
Creator of Sharpee


Download: [Sharpee v1.0.0-alpha.1](https://github.com/ChicagoDave/sharpee/releases/tag/v1.0.0-alpha.1)
License: MIT
Requirements: Node.js 18+, pnpm 8+
Status: Alpha (not for production use)


Extensions, Interfaces, and Semantic Grammar

[Written by Claude Opus 4.1]When building an interactive fiction (IF) engine, one of the most challenging aspects is creating a system that's both powerful enough for complex stories and flexible enough to accommodate different authoring styles. Today, I want to share three interconnected architectural decisions in
Extensions, Interfaces, and Semantic Grammar

[Written by Claude Opus 4.1]

When building an interactive fiction (IF) engine, one of the most challenging aspects is creating a system that's both powerful enough for complex stories and flexible enough to accommodate different authoring styles. Today, I want to share three interconnected architectural decisions in Sharpee that work together to create this flexibility: our extension system, interface refactoring, and semantic grammar parsing.

The Extension Challenge

Every IF story is unique. A mystery game might need a conversation system with interrogation mechanics. A puzzle game might require complex object interactions. A fantasy adventure might implement a magic system. How do you build an engine that can support all these different needs without becoming a bloated, unmaintainable mess?

Traditional approaches often fall into two traps:

  1. The Kitchen Sink: Include every possible feature in the core engine, making it heavy and complex.
  2. The Walled Garden: Provide limited customization points, forcing authors to work around the engine's limitations.

We chose a third path: a lean core with a powerful extension system.

Extensions as First-Class Citizens

In Sharpee, extensions aren't an afterthought—they're how the engine itself is built. Even our standard library of actions (TAKE, DROP, EXAMINE, etc.) is implemented as an extension. This dog-fooding approach ensures that story authors have the same power as engine developers.

An extension in Sharpee can:

  • Add new actions and commands
  • Define custom traits for entities
  • Register event handlers for game events
  • Provide language-specific vocabulary and messages
  • Implement entirely new game mechanics

Here's what a simple extension looks like:

export const conversationExtension: IExtension = {
  metadata: {
    id: 'conversation',
    name: 'Conversation System',
    version: '1.0.0',
    description: 'Adds dialogue and conversation mechanics'
  },
  
  traits: [
    {
      id: 'conversable',
      schema: ConversableSchema,
      implementation: ConversableTrait
    }
  ],
  
  actions: [
    {
      id: 'if.action.talking',
      pattern: 'talk to :character',
      implementation: TalkingAction
    }
  ],
  
  eventHandlers: {
    'conversation.started': handleConversationStart,
    'conversation.ended': handleConversationEnd
  }
};

This extension adds the ability for entities to be conversable, implements a TALK TO command, and handles conversation-related events. A story that doesn't need conversations simply doesn't load this extension.

The Interface Refactoring Journey

As our extension system grew, we encountered a problem. We had interfaces scattered across packages with inconsistent naming. Some interfaces in our `core` package were actually implementation details. Others in our `stdlib` package were mixing contracts with implementations.

More critically, we discovered naming collisions. Both `core` and `stdlib` defined an `Action` interface, but they meant different things. The core version was a low-level execution interface, while the stdlib version was a rich, author-friendly abstraction.

This led to our I-prefix refactoring initiative. We established clear rules:

  • All interfaces get an `I` prefix (following Enterprise Typescript conventions)
  • Core package contains only pure interface definitions
  • Implementation classes live in their respective domain packages
  • Extension points are clearly marked as interfaces

The refactoring revealed our true architecture:

@sharpee/core (IAction, IEntity, ISemanticEvent)
    ↓
@sharpee/world-model (IWorldModel, IFEntity extends IEntity)
    ↓
@sharpee/if-domain (contracts for IF concepts)
    ↓
@sharpee/stdlib (rich implementations with scope & validation)

This layering allows extensions to hook in at the appropriate level. A simple extension might just use stdlib's rich interfaces. A complex extension might implement core interfaces directly for maximum control.

Semantic Grammar: Understanding Intent

The third piece of the puzzle is semantic grammar parsing. Traditional IF parsers match patterns and extract objects:

Pattern: "put :item in :container"
Result: { verb: "put", directObject: item, indirectObject: container }

This works, but it loses information. Did the player type "carefully place," "jam," or "gently set"? These variations carry semantic meaning that can enhance the story's response.

Our semantic grammar system preserves and enriches this information:

{
  pattern: 'put|place|jam|shove|stuff :item :container',
  semantics: {
    'put': { manner: 'normal' },
    'place': { manner: 'careful' },
    'jam': { manner: 'forceful' },
    'shove': { manner: 'forceful' },
    'stuff': { manner: 'careless' }
  }
}

When a player types "jam coin slot", the action receives:

{
  actionId: 'if.action.inserting',
  directObject: coin,
  indirectObject: slot,
  semantics: {
    manner: 'forceful'
  }
}

Actions can now respond appropriately:

if (semantics.manner === 'forceful') {
  return event('action.success', {
    messageId: 'inserted_forcefully',
    params: { item: coin.name }
  });
}

This semantic information flows through the entire system. Extensions can define their own semantic properties. Event handlers can react to how actions were performed, not just what was done.

Bringing It All Together

These three architectural decisions reinforce each other:

  1. Extensions need clear interfaces to hook into the engine.
  2. Interfaces need to be well-organized to support extensions.
  3. Semantic grammar provides rich information that extensions can leverage.

Consider a combat extension. It can:

  • Define interfaces for combat-capable entities (using our refactored interface system)
  • Add semantic properties for attack manner (slash, stab, swing)
  • React to these semantics in combat resolution

The result is a system where:

  • The core engine remains lean and focused
  • Story authors have unlimited flexibility
  • The architecture stays clean and maintainable
  • Player intent is preserved and understood

Looking Forward

We're continuing to evolve these systems. Current work includes:

  • Standardizing extension APIs across all packages
  • Adding semantic properties for emotional tone
  • Creating a marketplace for sharing extensions
  • Building developer tools for extension creation

The goal isn't just to build another IF engine. It's to create a platform where story authors can focus on their narrative while having the power to implement any mechanic their story needs.

Interactive fiction is a unique medium that sits at the intersection of literature and software. Our architecture embraces both sides of that intersection—providing the structure of good software engineering while preserving the expressiveness needed for compelling storytelling.


Sharpee is an open-source interactive fiction engine written in Typescript. Learn more at [sharpee.plover.net](https://sharpee.plover.net) or contribute on [GitHub](https://github.com/sharpee/sharpee).

Monday, 18. August 2025

Choice of Games LLC

Author Interview: Brian Rushton, “Star Crystal Warriors Go!”

It’s tough fighting evil by moonlight and being an ordinary 90s kid by daylight! Can you save your city’s dreams from monsters, halt a magical plague in its tracks, and still help your new club prepare for the best school festival ever? Star Crystal Warriors Go! is a 250,000-word interactive retro magical girl anime novel by Holly McMasters, with additional content by Brian Rushton. It releases nex

Star Crystal Warriors GoIt’s tough fighting evil by moonlight and being an ordinary 90s kid by daylight! Can you save your city’s dreams from monsters, halt a magical plague in its tracks, and still help your new club prepare for the best school festival ever?

Star Crystal Warriors Go! is a 250,000-word interactive retro magical girl anime novel by Holly McMasters, with additional content by Brian Rushton. It releases next Thursday, August 28th, and you can wishlist it on Steam today. (Even if you don’t plan to buy it on Steam, wishlisting really helps!)

You’ve spent a lot of time thinking about Choice of Games, including having played every game in our catalog (at least up through 2021). Can you share a little about that process and whether you’ve continued to play every release?

I’ve been a heavy reader my whole life, and I enjoy diving into new genres and reading the best they have to offer. Before I worked with Choice of Games, I reviewed hundreds of interactive fiction games, from 80’s parser games to Porpentine’s Twine games and everything in-between.

I played a few early Choicescript games and got hooked. Choice of Robots and Slammed! were my early favorites. I was really taken with the way Choice of Robots lets you take such divergent paths (I’ve replayed it many times!) and I thought the twists and choices in Slammed! were really gripping, especially with the main NPCs.

So I was excited when, after working with Choice of Games, I was offered the opportunity to get review copies of the catalog up to that point. It was fantastic; playing the whole back catalog revealed so many hidden gems. Besides the super-famous games like Creme de la Creme and Choice of Rebels, I really liked games like Heart of the House and The Tower Behind the Moon and even scrappy, unusual games like Treasure Seekers of Lady Luck.

But I think I learned more from the less-popular games than the great ones. The best games make it all seem natural: the stats, the choices, the branches, you barely notice them as you’re engrossed in gameplay. But when a game goes ‘wrong’, it usually has something that sticks out like a sore thumb: tests that are too hard, too many stats, not enough branching, too short of a conclusion. And, playing more games, I saw that a lot of lower-rated games had issues in common, which became the body of the essay I wrote.

I should say, though, that this is all a matter of degrees. Compared to the amateur interactive fiction I usually play, every published Choicescript game is at least 4/5 stars for me. And even ‘bad’ games have their own charm. A good example is Gilded Rails. It’s one of the lowest-rated games, but I think that’s mostly due to how unusual it is, focusing on intense resource management and multiple romances over traditional plot.

I haven’t played every release since then, mostly due to money issues. The early 2020’s were pretty rough for me. I did pick up a lot of games I knew I’d like, though, like several Vampire: The Masquerade games, Stars Arisen (I’m looking forward to that author’s upcoming game!), and Restore, Reflect, Retry. I’m doing a little better financially now, though, and have started going through more games, starting with the cheapest Hosted Games.

Your first game with us was In the Service of Mrs. Claus, which is a really fun romp and a unique take on a Christmas story. What has been your experience coming back to ChoiceScript with SCWG having both written a game yourself in the past, and done this heavy analysis of our games?

Some people say the first book is the hardest, and that’s definitely true for me. I loved the concepts and themes of In the Service of Mrs Claus, but I was pretty overwhelmed while writing it. Due to family circumstances, I had to hurry the writing process, and I also suffered from extreme writer’s anxiety, so much that I’d spend hours just trying to overcome my writer’s block, only to write a few hundred words. The game ended up pretty short.

I also struggled with overall design, and so many of the most egregious examples of ‘stat disease’ and other common author problems in my essay were taken from my own game! Fortunately, editing and beta testing reduced a lot of issues and I’ve really enjoyed the positive responses I’ve gotten for Mrs. Claus over the years. But I definitely felt like I could have done more.

With SCWG, I had a much better grasp on both how to make good games and how to overcome writer’s block. I had just come off of writing a 350K-word parser game called Never Gives Up Her Dead, which I had written in just over a year, and I had a lot more experience with Choicescript games. More importantly, I didn’t have to rush. I came on after 100K words were written in the project, and only contracted to write 50K, but I wanted to do the very best I could to flesh out this game and fulfill the first author’s artistic version. I ended up adding 150K words instead of 50K, and made sure to do frequent check-ins with beta testers while writing and at the end. I especially wanted to avoid stat confusion, and made sure to change stat names to be distinct, allow the game to use the full stat bars and not stay stuck down low, added a ‘stats explanation’ guide and a visible stats mode, and included end of chapter saves. Everything I could think to add to the game mechanically, I did. Every plot thread I could resolve or character I could develop, I did. But, of course, writing isn’t an exact science, so I’ll have to see how readers respond to this game and learn from that response.

What did you find surprising about things this time around, given that you were adding work to another author’s project?

Well, my biggest surprise was finding out how similar my own writing is to Holly McMaster’s! Reading the draft project, I varied between, “this sounds like I could have written it” and “I wish that I had written this!” We both have a love for magic powered by creativity and dreams, with terrifying monster opponents and multiple worlds.

Working with another author was both challenging and rewarding. The biggest benefit, to me, is the original author’s skill at writing character relationships. Many people who’ve played the drafts and the final version have commented on how much they love the character arc of Polaris, your animal companion. It also helps that the first author writes good dialogue, something which I often struggle with and have to refine through multiple drafts and rounds of feedback. On the other hand, I was able to contribute to the fight scenes and spicing up the location descriptions, skills which are important in the parser games I wrote before working for Choice of Games.

The challenges were in working with a pre-existing setting and characters. My biggest goal was to fully realize the original author’s concept and not to replace it with my own plans. If I had written it from scratch, then I probably would have designed it differently, with my own take on the branching and scene structure. But this was someone else’s project first. I loved the initial draft I played (I even made fan art of the characters) so I’ve thought, “How can I make a finished version of this game that others can enjoy?” instead of, “How can I make this my own?”

The most significant additions I made to the author’s vision came from beta testing. One thing I’ve learned over the years is that if multiple beta testers ask for something, you should definitely give it to them, even if it’s not what you originally intended. Comments from beta testers led to more romance scenes and options as well as a deeper exploration of the loss of the main character’s mother.

Overall, my experience with this collaboration has made me want to collaborate again. I’ve even talked to my sister about working on a Hosted Games concept based on a Brazilian Jiu-Jutsu gym as a fun side project for us to write casually over the next few years; she loves Jiu-Jitsu and the stories she tells about the people there could work well in Choicescript format.

What do you think our readers will enjoy most about SCWG?

To me, this game feels like an animated movie you’d watch on a Saturday morning. Some of my favorite Choicescript games are simulationist, where you replay over and over again to test your ideas and maximize your rewards. Other favorite games have characters I feel like I can really get into and roleplay. And others, like Slammed!, have great plot with characters that I end up connecting with and which have left me with a satisfying narrative experience. SCWG is the latter, for me. When I played the first draft, I felt really invested in characters like Kit (your alluring nemesis) and Polaris (your mysterious animal friend) and the ways that my character could influence them and bond with them. Everything I’ve added to the game myself has just been to build on those characters, to help others read about them and get to know them, and to give them a rewarding ending. That’s where a lot of the extra writing went; each of the main characters has around 12 different possibilities for how they can end up and their relationship with you, and each of those branches has some variation of its own.

Do you have any new favorites in the COG, HC, or HG catalog?

Well, in the last year I played Wayhaven, and I finally get why everyone enjoyed it so much. I’m a big mystery fan and I love the variation in the 4 romantic leads. It’s definitely influenced the way that I think about and write romance in games. And Stars Arisen was a lot of fun for me. I like being powerful in games, so being the child of a goddess and using high-level magic was definitely fun.

What advice do you want to offer prospective authors of a ChoiceScript game?

I would offer two pieces of advice:

Get feedback early and get feedback often! If you put off compiling and playing your game or letting others try it until the very end, you have no time to fix anything. And there’s no telling how things will go over until you actually try it. For instance, beta testers and my editor found that Star Crystal Warriors Go had extremely difficult challenges in a lot of places (some with a success rate of less than 5 in 10,000!). With their help, I was able to tone it down. Other testers noted that the game started off rough but really took off around chapters 5 and 6, so I went back and gave a lot of extra care to early chapters. The more feedback you get, the better!

Find a writing rhythm that works for you. In my first game, I shot for writing 1000 words a day. I ended up not being able to reach that, and would feel bad, and do worse the next day. Now, I set really small milestones. If I write 300 words, I get to listen to one podcast or beat one level of a game. Then I write another 300 words. That helped me quadruple my writing rate. Everyone is different, so feel free to experiment and try different styles until you find something that you feel comfortable with!

Sunday, 17. August 2025

IFComp News

The 2025 Colossal Fundraiser has begun!

Hello, friends. We are just a couple of weeks away from this year’s IFComp games being released. Are you looking forward to them as much as we are?? IT’S SO EXCITING!! (Unless you’re an author who is furiously testing and revising and recompiling and testing and revising and recompiling and… Good luck, authors! You can do it!)While we eagerly await the new games to come, we’d like to ask for

Hello, friends.

We are just a couple of weeks away from this year’s IFComp games being released. Are you looking forward to them as much as we are?? IT’S SO EXCITING!! 
(Unless you’re an author who is furiously testing and revising and recompiling and testing and revising and recompiling and… Good luck, authors! You can do it!)

While we eagerly await the new games to come, we’d like to ask for your help with the Colossal Fund. If you already know about the fund and are able to contribute, please go to ifcomp.org and hit that blue “Donate with PayPal” button!

If you’d like more information first, keep on reading…

The Colossal Fund raises money for the cash prizes that are awarded to the top two-thirds of IFComp entries. We use 80% of the funds for that, and the remaining funds are used to provide support for the programs and projects of the Interactive Fiction Technology Foundation, including the Interactive Fiction Competition, the IF Archive, the IFDB, the forums at intfiction.org, and other projects.

This year, we are shooting for $8K.

We’re now accepting donations for 2025!
The donation button is live at IFComp.org. See your name listed on our donor page (or listed as “anonymous” if you prefer)!
Our fundraising deadline is October 15th - the last day of competition voting. 80% of the proceeds (~$6.4K if we hit our goal) will be distributed among the top two-thirds of IFComp finishers. 

What does this mean for authors?
Because we’re dividing the money among the top two-thirds of games, the exact numbers depend on how many entries there are. If we have 75 entries, then we will divide the money among the top 50. If we hit our goal, that would mean that the winner of the competition will be offered a prize of $357, second place will be offered $343, third prize $329… and so on and so forth until 50th place, which will be offered $10.  Our goal is to distribute prizes across a broad range of IF styles and ideas. Any game which does even moderately well is offered a decent prize. (If you wanna get nerdy, there’s information about the formula with a link to a Python script here.)

How do I donate?
Please go to https://ifcomp.org and push the big blue Donate button.

Is my donation tax-deductible?
Yes, to the extent allowed by law. (Consult a tax professional.)

Does the Colossal Fund replace the usual IFComp prize list?
Nope! These cash prizes will be in addition to the usual IFComp prize list. We do need more of those non-cash prizes as well! Please visit our prize page to see what objects and services others have donated, get ideas from donations given in previous years, and see how you can contribute.

How will the cash prizes be distributed?
Via PayPal or Venmo. (The IFComp entry form has a field for your Paypal address.) If you can’t accept PayPal or Venmo, we can mail a US check to a US address. If that doesn’t work for you, or if you wish to decline the cash prize, we will roll the money into next year’s prize fund, which means it will continue to support authors and IFTF programs.

Saturday, 16. August 2025

Renga in Blue

Citadel (1981)

Many of the British product samples remained at the company. We tested as hard as we could but didn’t dare sell any hardware that was obvious crap. The British were more relaxed about that kind of thing than the Danes. — Rolf Ask Clausen, of the company ZX-Data In late 1980, the Danish journalist Svend […]

Many of the British product samples remained at the company. We tested as hard as we could but didn’t dare sell any hardware that was obvious crap. The British were more relaxed about that kind of thing than the Danes.

Rolf Ask Clausen, of the company ZX-Data

In late 1980, the Danish journalist Svend Garbarsch made a fateful call to Clive Sinclair, regarding a ZX80 he had seen in a British magazine.

By that time, Denmark certainly had a tradition of computing in general dating back to Regnecentralen (funded directly via Marshall Plan money for reconstructing Europe after WWII) with the companies Christian Rovsing and Danish Data Electronics later big contenders. None really tried to enter the consumer space. Regnecentralen modified a Data General Nova mini-computer to be the RC 7000 in 1970…

…and then transformed it into the RC 3600 as a business/school computer. Christian Rovsing also focused on mini-computers; the latecomer DDE made their first computer in 1975 for “data collection, process control and monitoring”.

An ID-7000, the first computer from Danish Data Electronics.

Arguably the most interesting early stab at Danish home computing was the ICL Comet. (ICL we’ve seen before: essentially Britain’s counterpart to IBM, with the I in the name meaning International.) As their computers generally used CP-M as their operating system we won’t have any Comet-specific software in this Project’s future; the important point is that it still tended to be targeted at the higher end / hobbyist audience, along with various computer kits like the Nascom. Even the Commodore PET was considered more of an expensive business machine.

What all this means is when Svend Garbarsch made his call from Denmark to England, a “cheap” computer for the masses in Denmark had yet to be introduced. Somehow in the process of the conversation with Clive Sinclair, the salesman-CEO talked the journalist into forming a distribution outlet for ZX80s: hence the founding of ZX-Data. According to his nephew Rolf Ask Clausen, the first test computer came at Christmas 1980 through the post office, and he had to “explain to the customs officers what the ZX80 machine was, and thus how it should be cleared through customs.”

In their first ad, the Sinclair ZX80 was dubbed “Folkedatamaten” — “The People’s Computer” — and orders started streaming in. According to his nephew Rolf Ask Clausen who was there from the beginning, he “worked day and night” trying to keep up. After a month they had to increase their warehouse space and hire more people.

Note this is after the ZX81 already launched elsewhere! One might suspect leftover product being handed off, especially given the failure rate sometimes went to 10%. ZX-Data did switch to shipping out ZX-81s by November 1981; the ZX Spectrum (where the failure rate finally calmed down) filtered down to Denmark by 1983.

Cover of a March 1982 newsletter from ZX-Data.

Now, I need to back up the story a little. Today’s game, while written by a Dane in Copenhagen, was first published (as far as we know) in February 1981, which is before the ZX-Data launch. To explain, let’s go back to a pivotal moment in 1980–

The Australian Tim Hartnell had floating through multiple jobs, including news reader for a TV station, before landing in London as a journalist working for the Australasian Express; his writing was of the “nerdier” inclination and included a mathematics column.

The photo above was taken in April 1980 outside Madame Tussaud’s. Tim was puzzling over the ZX80 which had launched two months before. He had obtained a book on BASIC programming that he is shown reading here, specifically having trouble with the chapter about For/Next loops. According to Young:

It was while he was reading this chapter that Tim realised that if he was having difficulty understanding this programming stuff, then other people probably were too. This photo virtually shows the instant that Interface Publications was born.

He swerved his journalist career towards computers, writing one of the very early books for ZX80, Making the Most of Your ZX80.

This particular book was put out by Computer Publications (later well-known for the magazine Sinclair User) but Hartnell went on to form his own publisher, Interface (co-founded with Robert Young); he also launched a ZX-80 club which quickly got “thousands” of members.

The club’s February 1981 issue of their publication advertised (for the first time) a 16K SUPERGAME.

Citadel on the bottom. Labyrinth is from Hartnell’s ZX80 book and is even more marginal as an adventure game, but I’ll still visit it sometime.

Ole Noerregaard of Copenhagen was a regular contributor starting in 1980, so he somehow got a hold of a ZX80 anyway despite them not having an official distributor in Denmark. (There’s always either talking past or smuggling through customs!) With the caveat that this is only a quasi-adventure game, it’s the first of its type we know of from Denmark. It was written in English. (My next game, which involves a completely different story, will get into the first one written in Danish.)

The game did have some “professional distribution” but the word “professional” earns those quote marks.

If you think that’s bad, look at the inside:

The publisher is not Lion. The publisher is the exceedingly obscure CDS Micro Systems. Lion is the one who made the tape, and CDS flipped it over and slapped CITADEL on it and called it good. CDS does have a few other games (all ZX80) and two of them (Andromeda and Timestar) are sort-of adventure games (with Wumpus-style navigation) but they don’t seem to have any connection with Ole Noerregaard so we’ll pitch studying them for some future time.

To summarize:

a.) Tim Hartnell launched a club and publication in the UK after discovering the ZX80 as a journalist.

b.) Denmark in general didn’t get any kind of distribution until a different journalist (Svend Garbarsch) called Clive Sinclair and got talked into founding ZX-DATA, which started distributing mid-1981.

c.) Prior to that, it was still possible through other means to cart hardware between countries, and Ole Noerregaard not only expanded his computer to 16K but was an enthusiastic contributor to Hartnell’s publication Interface, getting a SUPERGAME published starting early 1981 with some extra distribution by the dodgy CDS Micro.

Commentor Rob (who clued me in on the game’s existence) sent a less-damaged picture of a later issue of Interface with a blurb.

16K SUPERGAME: Make the most of your new, expanded memory with CITADEL. In the remote land of Destaphnya; shrouded in mist at the peak of Mt. Nganra, stand the CITADEL. For a thousand years, men have sought to find the secret hidden in the citadel, to possess its power. All have been repelled by the Dark Agents of Protection. Will you succeed where the others have failed? Can you storm the CITADEL? If you have a 16K RAM pack, you need CITADEL.

The game’s lore involves the titular Citadel “existing in many dimensions”; your job is to get as much treasure as possible.

You can carry four objects at a time, and bring them back to the start in order to “place” them in your home dimension, getting points. You are given three items at the start (none of which are explicitly treasure, but any item in the game gets points when stored as a treasure). The instructions give a goal of 1200 points. Commands are all single-letter.

(As an aside, regarding the ZX80, I think it’s notable we haven’t seen attempts at parser games, Planet of Death aside. It isn’t like the expanded version is really that much different from the ZX81 in a BASIC-code sense, but rather, the screen-blinks-at-every-keypress when typing long commands gets very grating. The issue is mitigated with single letter commands. If you need to see what a parser game looks like on ZX80, this link will take you to a playable version of Planet of Death.)

Room descriptions in the citadel are randomly generated, and not in a consistent positional way. That is, the room description changes every turn, even if you stop and “look” while hanging out. While some descriptions are genuinely vivid the overall effect is to make them be ignored; there is no “exploration pleasure” in finding a vivid new scene.

Both this and the previous room are the exact same room, the second screen obtained but using Look.

The map is randomly generated each time, making a 7 by 7 map. I have one of them fully rendered here, where monster encounters are marked with a danger symbol.

Notably, the map is not just a single path, but has some merging, meaning that you could technically avoid monster encounters if you knew where they were ahead of time. Alas, with no save game feature, it’s a matter of spinning the dial at random.

There’s no running away: each encounter requires you ATTACK with your choice of inventory item (like POLE ARM) and as far as I’ve been able to find by squinting at the source code the choice of weapon does not matter: it’s random if you have anything good happen or not.

Usually combats end by the enemy running away, either delivering a blow (as shown above) or having a draw with no damage given (a good result). You have a LIFEFORCE that starts at 400 and goes down by 100 on a good hit.

The one (1) time that I managed to kill a monster was on a skeleton. One of the “weapons” was a silver cross so you might think that might give an advantage in undead-combat but no: this was with a pole arm, and there seems to be no effect to the choice of weapon.

I did eventually scrounge out by luck what I think is essentially a max score. However, the game never acknowledges such and still claims there’s more treasure in the Citadel (there wasn’t).

This hence doesn’t rise to the level of an adventure — no real exploration, object choice doesn’t matter — but it isn’t an RPG either, as there are no stats other than the overall life force going down. So it’s in that weird in-between space that happened in early games where it isn’t a recognizable genre at all. Clearly the author put a lot of effort into the map generator and had some legitimately colorful room descriptions to match, but simply rose to the level of a “slot machine game” and stopped there. This was still worth playing as it will make an interesting comparison with the other ZX80 “quasi-adventure” specimens out there; for now, we’re going to switch to Danish, and look at their first “real” adventure.

The enormous chess board is my favorite of the random descriptions.

POSTNOTE: There’s a version of Citadel called Catacombs of Morglim that was tweaked by Trevor Sharples of the ZX80 club. It was published as actual source code in the pages of the Interface, but with the map generator taken out. A follow-up article by Sharples mentions methods of tweaking the source code; weirdly, the follow-up talks about having it generate a new cave each time, putting a generator back in. And no point during either article is Citadel mentioned as the original. This still seems to be in the hacker-code-sharing mode where “ownership” was very loose. Or maybe Catacombs of Morglim was the first version (only distributed “person to person” so to speak) and Citadel was the enhanced version? Citadel started being published first, but that doesn’t mean it was written first.

Friday, 15. August 2025

Interactive Fiction – The Digital Antiquarian

Bullfrog in the Dungeon

This article tells part of the story of Bullfrog Productions. In January of 1995, Electronic Arts bought the prestigious British games studio Bullfrog Productions for an undisclosed sum that was rumored to be in the neighborhood of $45 million. The lives of the 35 or so people who worked at Bullfrog were transformed overnight. Peter […]

This article tells part of the story of Bullfrog Productions.


In January of 1995, Electronic Arts bought the prestigious British games studio Bullfrog Productions for an undisclosed sum that was rumored to be in the neighborhood of $45 million. The lives of the 35 or so people who worked at Bullfrog were transformed overnight. Peter Molyneux, the man who had built the studio’s reputation on the back of his “god game” Populous six years earlier, woke up the morning after the contract was signed with real money to spend for the first time in his life. For him and his colleagues, the new situation was gratifying, but also vaguely unsettling.

The acquisition came with all of the expected rhetoric from EA about “letting Bullfrog be Bullfrog.” Inevitably, though, the nature of the studio’s output changed in the years that followed. EA believed — and not without evidence — that series and brands were the key to long-term, sustainable success in the games industry. So, it encouraged or pressured the folks at Bullfrog to connect what they were doing now with what they had done before, via titles like Magic Carpet 2Syndicate WarsPopulous: The Beginning, and Theme Park World. Iteration, in other words, became at least as prized as the spirit of innovation for which Bullfrog had always been celebrated.

And where the spirit of innovation refused to die, you could always do some hammering to make things fit. The most amusing example of this is one of the two best remembered and most beloved games to come out of this latter period of Bullfrog’s existence. What on earth could be meant by a “theme hospital?” EA couldn’t have told you any more than anyone else, but the name sounded pretty good to it when one considered how many copies Theme Park had sold the year before the acquisition.


Theme Hospital was born as one of about a dozen ideas that Peter Molyneux wrote on a blackboard during the heady days just after the acquisition, when Bullfrog had a mandate to expand quickly and to make more games than ever before. This meant that some of the Bullfrog old guard got the chance to move into new roles that included more creative responsibility. Programmer Mark Webley, who had been doing ports for the studio for a few years by that point, thought that Molyneux’s idea of a simulation of life at a hospital had a lot of potential. He plucked it off the list and got himself placed in charge of it.

In the beginning, he approached his brief with a measure of sobriety, not a quality for which Bullfrog was overly known. He even thought to do some field research at a real hospital. He and visual artist Gary Carr, the second person assigned to the team, talked the authorities at Royal Surrey County Hospital, conveniently located right next door to Bullfrog’s offices in Guildford, England, into giving them a behind-the-scenes tour. It proved rather more than the pair had bargained for. Videogame violence, which Bullfrog wasn’t noted for shying away from, was one thing, but this was something else entirely. The two young men were thrown out of at least one operating theater for retching. “I remember we watched a spinal operation one morning, which was bad enough,” says Carr. “Then the person who had been assigned as our guide said, ‘Alright, after lunch we can pop down to the morgue.'” It was right about then that they decided that an earnest simulation of life (and death) at a National Health Service hospital might not be the right way to go. They decided to Bullfrog the design up — to make it silly and irreverent, in Bullfrog’s trademark laddish, blackly humorous sort of way. “It’s not about how a hospital runs,” said Mark Webley sagely. “It is about how people think [it] runs.”

Webley played for a while with the possibility of making Theme Hospital a sort of satirical history of medicine, from the Middle Ages (“when curing people usually meant hacking their legs off with a bloody great saw, covered in leeches”), through the Victorian Age (“lots of mucking about with electric shocks and the like”), and on to the present and maybe even the future. In the end, though, that concept was judged too ambitious, so Theme Hospital returned to the here and now.

That said, the longer the slowly growing team worked, the less their game seemed to have to do with the real world of medicine that could be visited just next door. A former games journalist named James Leach came up with a matrix of absurd maladies: Bloaty Head (caused by dirty rainwater and putrid cheeses), Broken Wind (caused by too much exercise after a big meal), Slack Tongue (caused by too much vapid celebrity gossip), Infectious Laughter (caused by hearing too many sitcom laugh tracks), King Complex (afflicting Elvis impersonators who spend too much time in character). The cures are as imaginative as the diseases, generally involving slicing and dicing the patients/victims with one or more horrifying-looking Rube Goldberg contraptions. Theme Hospital is healthcare as those with a deathly fear of doctors imagine it to be.

The finished game is deceptively complex — perhaps a little too much so in my opinion. You start each scenario of the campaign with nothing more than a plot of land and a sum of starting money that never seems to be enough. You have to build your hospital from scratch, deciding where to place each and every room, and then where to put everything that goes inside each room, from the reception desk to the toilets to the even more important soda and candy machines. (This is most definitely not socialized medicine: your hospital is expected to make a profit.) Then you have to hire doctors, nurses, janitors, and administrative personnel from a wide variety of applicants. Figuring out how best to fiddle the countless knobs that affect the simulation requires considerable dedication; every input you make seems to result in a cascade of advertent and inadvertent consequences. Once the action really starts to heat up, Theme Hospital can become as frenzied as any session of Quake or Starcraft. Keeping the pot from boiling over in the midst of an epidemic or a disaster — events that become more and more frequent as you progress further — requires constant manual intervention, no matter how efficiently you’ve laid out your hospital and how judiciously you’ve selected its staff.

Your reaction to all of this will depend on two factors: whether you’re someone who is inherently drawn to open-ended simulations of the SimCity and Theme Park stripe, and whether Bullfrog’s brand of humor causes you to come down with your own case of Infectious Laughter. My answer to both of these questions is a qualified no, which makes Theme Hospital not really a game for me. By the time I’d played through the first couple of scenarios, I could see that the ones to come weren’t going to be all that different, and I just didn’t have the motivation to climb further up the campaign’s rather steep ladder of difficulty. Speaking of which: the campaign is as rudimentary as the simulation is baroque. Each of its scenarios is the same as the one before, only with more: more diseases to cure, more requirements to meet, more pressure. It left me with the same set of complaints I recently aired about the campaign in Rollercoaster Tycoon: I just wish there was a bit more there there, an attempt to provide a more interesting and diverse set of challenges that entailed less building of the same things over and over from scratch.

But, just as was the case with Rollercoaster Tycoon, the game about which I’m complaining today did very well for itself in the marketplace, an indication that plenty of people out there don’t share my peculiar preferences. (Who would have thought it?) Released in the spring of 1997, Theme Hospital was by all indications Bullfrog’s biggest single latter-day commercial success, a game which continued to sell reasonably well for several years, sufficient to reach the vicinity of that magic number of 1 million units. In the process, it became sneakily influential. You don’t have to squint too hard to see some of the DNA of Theme Hospital in the more casual time-management games that became crazily popular about ten years on from it.


Dungeon Keeper’s box sports its mascot, the Horned Reaper. Or, as the lads at Bullfrog preferred to call him, Horny.

The other widely acknowledged classic from this period of Bullfrog’s history took even more time and effort to make than Theme Hospital. In fact, Dungeon Keeper — one does have to breathe a sigh of relief that EA’s marketers didn’t insist that it be called Theme Dungeon! — had the most extended and torturous development cycle of any game Bullfrog ever made.

The idea for Dungeon Keeper came to Peter Molyneux some time before the EA acquisition: in mid-1994, when he had just finished up work on Theme Park.

I was sitting in my car in the middle of a traffic jam. I was bored to tears, waiting for the cars in front to begin moving again. Then the idea of a reverse role-playing game popped into my head. Yes, I thought, this could be a good game. You could have loads of monsters crawling around deep, dark tunnels. You could have the power to control them directly, deal with all their problems and petty grievances. As your dungeon grew, your power would increase. You could mine and hoard gold and have to put down rebellions. On top of all this, you could have the traditional heroes invading the trap-laden dungeon you’d created. I was so deep in thought, I hadn’t realized the traffic had cleared.

Dungeon Keeper was a set of answers to questions that some of the more literal-minded players of Dungeons & Dragons and its ilk, whether played at the tabletop or on computers, had been asking for many years already. Just what was up with those nonsensical labyrinths filled with creatures, traps, and treasure that seemed to be everywhere in the worlds of Greyhawk and the Forgotten Realms? What was the point of them? For that matter, what did all those monsters eat while they were hanging out waiting for the next group of adventurers to come by? And what was it like to be the evil wizard with the thankless job of taking care of this lot?

Peter Molyneux, who called CRPGs “my favorite type of game” even though he had never made one, proposed to find some answers now by approaching the genre from the opposite point of view from the norm. It was one of the most brilliant conceptions he ever came up with: quick and easy to explain to just about anyone who knew anything about computer games, and at the same time something no one had ever attempted to do before. And it was as on-brand as could be, gently transgressive in that trademark Bullfrog way. Molyneux:

You have to hire monsters and keep them employed. How do you keep a monster employed? There are basically two ways to motivate your staff. The first is basically to pay them money, but you really don’t want to do that. The second and preferred method of influence is fear. Say you have a band of ten goblins and you want to maintain their loyalty. What’s the best way to do that? Kill off five of them. Ritual sacrificing is really important. You have to prove to the people below you that you’re evil. This is a dungeon, after all.

When the acquisition negotiations began, Molyneux was already tinkering with Dungeon Keeper alone. He was joined by a second programmer, Simon Carter, in November of 1994. EA loved the idea; in the wake of DOOM, dark and gritty violence was in in games. The two-man project may have been in its infancy, but it was a major selling point for Bullfrog during the talks with EA, who saw it as a game with the potential to become huge.

Alas, after the deal was done EA promptly started to pull Molyneux in way too many directions for his liking. He was given a set of executive titles and the executive suite to go along with it, removing him from the day-to-day work in the trenches.

There was me, this passionate sixteen-hour-a-day coder, who kind of lived with these other blokes who were in the office, and all of a sudden Electronic Arts came in and said, “Okay, right. We think you’re fantastic, and we want to expand your studio, and rather than one game [per year] we can get five games out of you.” The company literally went from 35 people to 150 people in nine months, and suddenly there were all these strangers there. Then they said to me, “We think you’re fantastic. We’re going to make you head of our studio in Europe,” and part of me was thinking this was amazing — these people really think I’m clever — but there was another part of me that felt awful, that this was alien and horrible to me. The foundation stones of my work completely changed…

A man with an obsessive-compulsive relationship to the games he made, who would increasingly acknowledge himself to be neurodivergent in later years, Molyneux was painfully ill-equipped for the role of a glad-handing EA vice president; it just made him uncomfortable and miserable. He was forced to oversee Dungeon Keeper — his own baby! — from afar. “I didn’t have time to look at games,” he says. “I was walking in, spending half an hour with them, and then walking out. That was the worst period of my life. Bullfrog was everything to me, and suddenly I was this character that would have to walk into a room and make instant judgments about things.”

From the beginning of 1995, Dungeon Keeper was extravagantly hyped in the gaming press, which ran preview after preview. This gives us an unusual insight into the stages of its evolution. For example, a preview published in the American magazine Computer Games Strategy Plus in the fall of that year describes a heavy focus on multi-player action. At this point, Dungeon Keeper sounds almost like a proto-Diablo, with the important twist that one player is allowed to be the mastermind of the dungeon itself. For those on the side of Good, “one strategy for building up your character would be to enter the dungeon, kill off a few creatures, and run away. Return later (fully healed, but at a cost), kill a few things, and run away again. Stats are kept for the usual physical attributes as well as experience and monsters killed. One interesting feature will allow players to take their saved [character] with them to other people’s dungeons as well.” A player character who conquered a dungeon’s overlord would have the option to come over to the side of Evil and take his place.

In truth, however, progress throughout 1995 was slow and halting, a matter of two steps forward and one step back — and sometimes vice versa. “We spent quite a bit of time just messing around with the idea, but not getting very far in terms of a design,” admits lead artist Mark Healey. Dungeon Keeper may have had a brilliant core concept, but there was no clear vision of how that concept would be implemented, of what kind of game it would ultimately be at the gameplay level. Was it primarily a puzzle game, a kind of Tower Defense exercise where you had to set up your monsters and traps just right to fend off a series of different heroes? Or was it an open-ended sandbox strategy game, a SimCity — or Theme Park — in a dungeon? Or was it, as Strategy Plus dared to write, a game “which may redefine the role-playing genre”? At one point or another, each of these identities was the paramount one, only to fall back down in the pecking order once again. Programmer Jonty Barnes, who was responsible for the Dungeon Keeper level editor, left Bullfrog in the summer of 1995 to finish up his degree at university. He claims that when he rejoined the team a year later the game had “reset. It was back to where we were when I’d left off.”

Be that as it may, the inflection point for the project had already come and gone by then. EA was extremely disappointed when Dungeon Keeper failed to ship in time for the Christmas of 1995, to supplement a Bullfrog lineup for the year that otherwise included only the under-performing Magic Carpet 2 and the thoroughly underwhelming racing game Hi-Octane — a poor early return indeed on a $45 million investment. Management started to make noises about cancelling Dungeon Keeper entirely if it didn’t show signs of coming together soon. Meanwhile Peter Molyneux was as miserable as ever: “I still really love games, and I hate what I’m doing at the moment.” He thought about resigning, then trying to find or found another company where he could make games like he had in the old days, but he couldn’t bear to lose all influence over Dungeon Keeper. And as for seeing his baby axed… well, that might just send him around the bend completely.

So, at the beginning of 1996, he went to the rung above him on the EA corporate ladder with a modest proposal. He’d had enough of meet-and-greets and wining-and-dining, he told his bosses forthrightly. He wanted to quit EA — but first he wanted to finish Dungeon Keeper. He wanted to climb back down into the trenches and make one last amazing game before he said farewell. EA scratched its collective head, then said okay — on two additional conditions. He couldn’t make his game from the Bullfrog offices, where he would be privy to inside information about the other projects going on and might, it was feared, try to poach Bullfrog employees for whatever he decided to do after Dungeon Keeper. He would have to find another spot for the team to work from. And naturally, he couldn’t tell the public that he was leaving the studio with which he was so closely identified until Dungeon Keeper was done. This sounded reasonable enough to Peter Molyneux.

He didn’t have to look far for a new workspace: he simply moved the core of the team — consisting of no more than half a dozen people — into a space above the garage at his house.[1]Some details of the arrangement — namely, the financial side — remain unclear. Molyneux has claimed in a few places that he paid for the rest of Dungeon Keeper’s development out of his own pocket in addition to providing the office space, but he is not always a completely reliable witness about such things, and I haven’t seen this claim corroborated anywhere else. Suddenly it was like the old days again, just a small group of friends working and playing together for a ridiculous number of hours each day to make The Best Game Ever. The team effectively became Molyneux’s roommates in addition to his colleagues. Jonty Barnes:

We would play the game at night drinking beers, arguing over who should have won based on how the game should be versus the way it was. If somebody won too easily, we could change the design the following day, and that really honed the intensity and the strategy of building Dungeon Keeper. We ended up working pretty much six or seven days a week for a long period of time, but we didn’t notice because we cared so much about what we were creating.

Over these endless hours of work and play, the what of the game slowly crystallized. Certain elements of the puzzler were retained: each scenario of the campaign would require you to fend off attacks by one or more avatars of Good. Ditto some elements of the CRPG, whose legacy would take the form of the ability to “possess” any of the monsters in your dungeon, running around and fighting from a first-person view. At heart, however, Dungeon Keeper would be a management strategy game, all about setting up and running the best dungeon you could with the resources to hand. It would borrow freely not only from the likes of Theme Park (and now Theme Hospital) but also from the more straightforwardly confrontational real-time-strategy genre that was exploding in popularity while it was in development.

Despite the jolt of energy that accompanied the move into Molyneux’s house — or perhaps because of it — work on the game dragged on for a long, long time thereafter. The Christmas of 1996 as well was missed, while EA’s bosses continued to shake their heads and make threatening noises. At last, just a few weeks after Theme Hospital had shipped, Molyneux and company declared Dungeon Keeper to be finished. True to his word, Bullfrog’s co-founder, leading light, and heart and soul officially resigned on that very day. “Dungeon Keeper is my final game for Bullfrog, and this is part of the reason I wanted to make it so good,” he told a shocked British press. “It’s a sort of goodbye and thanks for all the great times past.”


You start each scenario with only a Dungeon Heart. You must protect this nerve center and in particular the orb it contains at all costs, for if the orb is destroyed, you die instantly.

Keeping a dungeon turns out to be a bit like keeping a zoo. You need a Hatchery to provide food for your minions, in the form of hordes of woebegone chickens.

Each type of monster also needs its own Lair to retreat to. (It turns out that a lot of these creatures don’t like each other very much.)

Neither a zoo nor a dungeon can run for long without a steady supply of filthy lucre.

The second scenario introduces the Training Room, where you can “level up” your monsters in exchange for gold.

The third scenario introduces the Library, where you can research spells with which to smite your enemies (or your minions). The campaign continues in this vein, layering on the complexity piece by piece.



When he looks back upon his career, Peter Molyneux tends to be a harsh critic of his own games. Dungeon Keeper is no exception: “It had a lot of things wrong with it. Too many icons. Too many game mechanics that were just wrong. It ended up being too dependent on little bits that were supposed to be there as jokes. In the end, I didn’t feel as proud about it as I had hoped.”

Very few people have agreed with this assessment. In its heyday, Dungeon Keeper enjoyed the best reviews of any Bullfrog game in years, outdoing even Theme Hospital in that respect. (Combined, the two titles created a real if fairly brief-lived “Bullfrog is back!” frisson.) Computer Gaming World called Dungeon Keeper “a damned fine creation. Its utter uniqueness and sense of style alone are worth the price, especially in these days of recycled inspiration. It’s a true gamer’s game — tremendously deep, demanding, and open to exploration.” GameSpot deemed Dungeon Keeper “among the best games released so far this year, and any fan of real-time strategy or classic fantasy role-playing games should run right out and buy this game. Hopefully, this is the new face of Bullfrog…”

Sales were solid, although not quite as strong as the reviews — not to mention EA’s early expectations — might have led one to believe. The game’s Achilles heel, to whatever extent it had one, was a dated presentation, a byproduct of the long development cycle and the small development team. It was among the last slate of games to be targeted at MS-DOS rather than Windows, and its muddy, pixelated graphics, caked with enough brown sauce to recreate the Mona Lisa, looked to be of even lower resolution than they actually were. At a glance, Dungeon Keeper looked old and a bit dull, in a milieu obsessed with the new and shiny.  (Theme Hospital was another MS-DOS anachronism, but its brighter color palette and cleaner aesthetics left it looking a lot more welcoming.)

But if you can get beyond the visuals, Dungeon Keeper goes a long way toward living up to the brilliance of its central conceit. If the first half of its development cycle was one extended identity crisis, the creators more than figured out what identity their game should have by the time that all was said and done. Its every element, from the silkily malevolent voiceovers by the actor Richard Riding, who sounds like all of Shakespeare’s villains rolled into one, to the countless little sadistic touches, like the way you can slap your minions with your big old claw-like hand to get them working faster, serves to justify the marketing tagline of “Evil is Good.” Even if you’re someone like me who genuinely prefers to be the good guy in games, you can’t help but admire Dungeon Keeper’s absolute commitment to its premise. And for those who do like the idea of playing the dark side more than I do, this game is the perfect antidote to all of those CRPGs that claim to let you do so, only to force you to do the right thing in the end for the — horror of horrors! — wrong reason. (A whole Parisian salon worth of existentialist philosophers would like to have a word with those game designers about the real nature of Good and Evil…) There’s no such prevarication in Dungeon Keeper; your intentions and your deeds are in complete harmony.

For my part, I enjoyed the game more than I really expected to — in fact, more than any other Bullfrog game I’ve played in the course of writing these histories. It helped immensely that Dungeon Keeper marks the point where Bullfrog finally gave us a proper, bespoke campaign, complete with a modest but effective spine of story, which sees you corrupting a succession of goodie-goodie realms with sticky-sweet names like “Eversmile.” The first half in particular of the 20-scenario campaign is one of the best of this era of gaming. Unlike a lot of earlier Bullfrog games, which were content to throw you in at the deep end, Dungeon Keeper starts off with just a handful of elements, then gradually layers on the complexity scenario by scenario, introducing new room types, new monsters, and new spells in a way that feels fun rather than overwhelming. The game plays quickly enough, and the scenarios are varied enough, that having to start over and build a new dungeon from scratch each time feels tempting rather than punishing. You’re always thinking about how you can build the next one better, thinking about how you can integrate the new elements that are introduced into what you’ve already learned how to do. It’s enough to win over even a middle-aged skeptic like me, whose heart isn’t set all aflutter by the transgression of being Evil.

Unfortunately, the happy vibes came to a crashing halt when I hit the tenth scenario of the campaign. Here the game breaks with everything the previous nine scenarios have been painstakingly teaching you; suddenly it’s not about constructing an efficient and deadly dungeon, but about bum-rushing the domain of another dungeon keeper before he can do the same to you. This aberration might be acceptable, if the game clearly communicated to you that a dramatic change in tactics is needed. But instead of doing so, the introductory spiel actively misleads you into believing that this scenario should be approached the same way as the nine preceding ones. Even worse, if you fail to attack and kill the enemy quickly, he will soon make himself effectively invulnerable, leaving you stuck in a walking-dead situation; you can easily waste an hour or more before you realize it. Coming on the heels of so much good design, the scale of the design failure here is so enormous that I want to believe it’s some sort of technical mistake — surely nobody could have intended for the scenario to be like this, right? — but it’s hard for me to see how that could be the case either.

I did eventually figure out what the scenario wanted from me, but I was left feeling much the same as when I run into a really bad, unfair puzzle in an adventure game. At that point, the game has lost my trust, and it can never be regained. I played through a couple more scenarios — which, to be fair, returned to the old style that I had been enjoying — but somehow the magic was gone. I just wasn’t having fun anymore. So, I quit. Let this be a lesson to you, game designers: just like trust between two people in the real world, trust between a game and its player is slow and hard to build and terrifyingly quick and easy to destroy. For any of you readers who choose to play Dungeon Keeper — and there are still lots of good reasons to do so — I’d recommend that you go in forewarned and forearmed with a walkthrough or a cheat for the problem-child scenario.[2]When you hit the tenth scenario, you can skip over it by starting the game from the DOSBox command line with the additional parameter “/ level 11”.


The Dungeon Keeper story didn’t end with the original game. Late in 1997, Bullfrog and EA released a rather lazy expansion pack called The Deeper Dungeons, a collection of leftover scenarios that hadn’t made the cut the first time around, with no new campaign to connect them. Far more impressive is Dungeon Keeper 2, which arrived in the middle of 1999.

The team that made Dungeon Keeper 2 was mostly new, although a few old hands, among them programmer Jonty Barnes, did return to the fold. The lead designer this time was Sean Cooper, the father of Bullfrog’s earlier Syndicate. He remembers the project as “a shift from writing games without many plans to getting really organized about what we were going to build. It was about keeping everyone in full view of what we were all trying to do together. That’s common practice today, but it was one of the first times for us.”

Less an evolution of the first game’s systems than a straight-up remake with modernized graphics and interface, the sequel’s overall presentation is so improved that this doesn’t bother me a bit. What was murky and pixelated has become crisp and clear, without losing any of its malevolent style; Richard Riding has even returned to louche it up again as the velvet-tongued master of ceremonies. I only played about five scenarios into this 22-scenario campaign due to time pressures — being a digital antiquarian with a syllabus full of games to get through sometimes forces me to make hard choices about where I spend my supposed leisure time — but what I saw was an even better version of the first campaign. Plus, I’m given to understand that there are no aberrations here like the tenth scenario of that campaign. Some purists will tell you that the sequel lacks the first game’s “soul.” Personally, though, I’ll take the second game’s refinement over any such nebulous quality. If I was coming to Dungeon Keeper cold today, this is definitely where I would start.

But, whether due to a lack of soul or just because it was too much too soon of the same idiosyncratic concept, Dungeon Keeper 2 didn’t sell as well as its predecessor, and so the series ended here. Sadly, this was a running theme of Bullfrog’s post-Molyneux period, during which the games became more polished and conventionally “professional” but markedly less inventive, and didn’t always do that well in the marketplace either. “I felt the heart of the place was missing,” says Mark Healey. “Bullfrog was no longer a creative haven for me. It felt more like a chicken factory.” And the chickens kept laying eggs. Populous: The Beginning, the big game for 1998, disappointed commercially, as did Dungeon Keeper 2 the following year. The same year’s Theme Park World[3]in North America, Theme Park World was dubbed Sim Theme Park in a dubious attempt to conjoin Bullfrog’s legacy with that of Maxis of “Sim Everything” fame, another studio EA had recently scarfed up. did better, but had much of its thunder stolen by Rollercoaster Tycoon, an era-defining juggernaut which had been partially inspired by Bullfrog’s first Theme Park.

Early in 2000, EA closed Bullfrog’s Guildford offices, moving most of the staff into the mother ship’s sprawling new office complex in the London suburb of Chertsey, which lay only ten miles away. The Bullfrog brand was gradually phased out after that. Old games studios never die; they just fade away.

Setting Dungeon Keeper aside as a partial exception, I’ve made no secret of the fact that the actual artifacts of Bullfrog’s games have tended to strike me less positively than their modern reputation might suggest they should, that I consider the studio to have been better at blue-sky innovation than execution on the screen. Yet it cannot be denied that Bullfrog laid down a string of bold new templates that are still being followed today. So, credit where it’s due. Bullfrog’s place in gaming history is secure. It seems only fitting that Peter Molyneux have the last word on the studio that he co-founded and defined, whose ethic has to a large extent continued to guide him through his restlessly ambitious, controversy-fraught post-millennial career in games.

It [was] an amazing, joyful roller coaster which I wouldn’t have traded for anything. It was an obsession. We were just obsessed with doing stuff that other people hadn’t done before. It was working very late and very hard and smoking lots of cigarettes and eating lots of pizza and bringing together some crazy insane people. We just had the reason to do stuff. There wasn’t a lot of process involved. We didn’t have producers. There were some brutally tough times there, but it was amazing.



Did you enjoy this article? If so, please think about pitching in to help me make many more like it. You can pledge any amount you like.


Sources: The book Bullfrog’s Official Guide to Dungeon Keeper by Melissa Tyler and Shin Kanaoya; PC Zone of May 1996 and May 2000; Retro Gamer 43, 71, 104, 110, 113, 130, 143, and 268; Computer Gaming World of December 1995, August 1997, October 1997, and October 1999; Computer Games Strategy Plus of November 1995.

Online sources include Peter Molyneux’s brief-lived personal blog, “Peter Molyneux: A fallen god of game design seeking one more chance” by Tom Phillips at EuroGamerGameSpot’s vintage review of Dungeon Keeper, and “Legends of Game Design: Peter Molyneux” by Rob Dulin at the old GameSpot.

Where to Get Them: Theme HospitalDungeon Keeper Gold, and Dungeon Keeper 2 are all available as digital purchases at GOG.com.

Footnotes

Footnotes
1 Some details of the arrangement — namely, the financial side — remain unclear. Molyneux has claimed in a few places that he paid for the rest of Dungeon Keeper’s development out of his own pocket in addition to providing the office space, but he is not always a completely reliable witness about such things, and I haven’t seen this claim corroborated anywhere else.
2 When you hit the tenth scenario, you can skip over it by starting the game from the DOSBox command line with the additional parameter “/ level 11”.
3 in North America, Theme Park World was dubbed Sim Theme Park in a dubious attempt to conjoin Bullfrog’s legacy with that of Maxis of “Sim Everything” fame, another studio EA had recently scarfed up.

:: CASA ::

CASA Update - 35 new game entries, 75 new solutions, 74 new maps, 8 new hints

♦ Busy spending your time panning for text adventure gold? Here's a quick summary of all the hints, maps and solutions that our regular posse of tipsters have sent in during the past couple of months... Contributors: iamaran, ASchultz, J-_-K, wilko0070, nimusi, FredB74, sequornico, wesp5, Strident, Oloturia, boldir, Garry, OVL, Exemptus, Canalboy, Sudders, benkid77, Bieno, Ingerson, Duffadash, A

Image
Busy spending your time panning for text adventure gold? Here's a quick summary of all the hints, maps and solutions that our regular posse of tipsters have sent in during the past couple of months...

Contributors: iamaran, ASchultz, J-_-K, wilko0070, nimusi, FredB74, sequornico, wesp5, Strident, Oloturia, boldir, Garry, OVL, Exemptus, Canalboy, Sudders, benkid77, Bieno, Ingerson, Duffadash, Alex

Thursday, 14. August 2025

Renga in Blue

Robots on Terminus IV: Somehow, Humanity Survived

(Previous posts here.) Thanks to Jeremy and Matt W. in the comments nudging a bit more at the game, humanity has been saved. I had made my way to a computer room which needed blowing up, and already had an escape vehicle in place, but actually placing the explosive was eluding me. The magic word […]

(Previous posts here.)

Thanks to Jeremy and Matt W. in the comments nudging a bit more at the game, humanity has been saved.

Placement of backspace and space on the ZX-81 keyboard specifically for this game.

I had made my way to a computer room which needed blowing up, and already had an escape vehicle in place, but actually placing the explosive was eluding me. The magic word for step one was PRIME.

This automatically combines the detonator and explosive together, and if the explosive is now dropped, it blows up.

As I theorized, TURN DIAL does now work (previously just saying YOU CANT), but it’s still a serious pain, because it asks

TO WHICH SETTING???

and I flailed for quite here. I was in the middle of my next post (which involves the same emulator that this game is on) and inspiration occurred to me:

I had actually tried THREE SETTING first, thinking about the unused THREAD verb that Matt mentioned — it’s a four-word parser, so it could have just been THREE as a verb — but that didn’t work. I immediately followed up with swapping the order to SETTING THREE.

PLACE EXPLOSIVE will now set everything to blow up.

I booked it to the escape craft…

…then pushed (I mean, pressed) the button to indicate my mission was over, and failed.

The explosive takes too long to blow up. This explains why the dial was needed in the first place! At setting THREE it is possible to walk your way to the exit, but I had pre-emptively solved what I think may have been intended as the central puzzle: make the timer tighter (TWO) and you can still escape by intermediate ship (not by walking!) and it will blow up before the patrol robots discover it.

Without the parser issues this is a short and well-designed vignette. You’re on a mission you’re actually well equipped to start, there’s some brief visit to a city which is minimal but vivid, you find the robot fortress and need to experiment to use their elevator, there’s some robot blasting with a LASER GUN, and the final part where you need to set a quicker timer to avoid the bomb being discovered (meaning you need a quicker exit) is genuinely satisfying. The problem is the “without the parser” exception, which dragged the game out to a week.

I have an idea what the CODEWORD is referring to: it might be used for a contest when the game was released. Computer Input from November 1983 mentions a contest for one of the other Antarctic Software games…

…so I could see an entry consisting of giving the codeword.

This game did not make much an appearance outside New Zealand; the only reference I’ve seen otherwise is from a truly puzzling mention in the UK Computer and Video Games magazine, August 1984. This comes from the column (common amongst magazines at the time) with people asking for help with their adventure game troubles.

The surreal cover is due to the adventure game based on the TV show Dallas.

New Zealand reader, Colin Foster, from Levin, is playing Antarctic Computing’s Robots on Terminus IV. He says it makes Espionage Island look simple and he can’t unseal the door in the spaceship, nor go near the pub. The fruit machine doesn’t seem to do much and he’s certain he has to go down the well, but can’t. Quite a daunting list, Colin, and unfortunately about а game I have never heard of. Are there any ZХ81 users out there who can cast light on these problems?

How did the door get sealed in the first place? Why would they have trouble entering the pub? Why would you be putting the fruit machine down the well (which only served as a landmark to help with mapmaking)? How did they pick up the fruit machine in the first place? If intended as a guerilla ad of sorts, why would it be in a UK magazine (where they would not have been able to get a hold of the game in the first place)?

ADD: Combining comments from ScienceBall and Gus Brasil, it appears the letter writer is not talking about leaving the ship but the armory. If you don’t get the armory open there’s no laser gun, and in order to enter the bar safely you need the gun (I never tried this) meaning no coin so no lever from the fruit machine. The author mentions the fruit machine and the well together but they’re just two separate dilemmas. Note he mentions Espionage Island (Arctic Adventure D) but Artic Adventure C (Ship of Doom) has a very similar puzzle to the armory one (POINT to use a device).

Coming up: The curious tale of how Clive Sinclair managed to kickstart the low-cost personal computer market in Denmark by a combination of charisma and accident.


Choice of Games LLC

“Games of the Monarch’s Eye”—Win back your honor or spark a revolution!

We’re proud to announce that Games of the Monarch’s Eye, the latest in our popular “Choice of Games” line of multiple-choice interactive-fiction games, is now available for Steam, Android, and on iOS in the “Choice of Games” app. It’s 33% off until August 21st! Duel your greatest rival to win back your honor—or spark a revolution! It’s a tournament of steel, stra

Games of the Monarch's EyeWe’re proud to announce that Games of the Monarch’s Eye, the latest in our popular “Choice of Games” line of multiple-choice interactive-fiction games, is now available for Steam, Android, and on iOS in the “Choice of Games” app.

It’s 33% off until August 21st!

Duel your greatest rival to win back your honor—or spark a revolution! It’s a tournament of steel, strategy, sabotage, or forbidden magic, in a fantasy world inspired by the Silk Road.

Games of the Monarch’s Eye is an interactive “silk and sorcery” fantasy novel by Saffron Kuo. It’s entirely text-based, 238,000 words and hundreds of choices, without graphics or sound effects, and fueled by the vast, unstoppable power of your imagination.

After a decade in disgrace, you have returned to your home city of Varze to compete for the title of Monarch’s Eye. In this grand tournament, the bravest Varzians compete in games of Intellect, Heart, and Might. The winner becomes the Monarch’s most trusted guard and advisor, gaining wealth, fame, and honor—everything that you have lost. The only catch? The current Eye—and therefore your main competition—is Casiola, once your childhood friend and now your bitterest rival.

While you were gone, the city has grown volatile. Powerful factions vie for dominance and the guilds’ professional differences now spill over into political rivalries. On one side, there’s the idealist Artisans, rumored to practice ancient forbidden magic in their crafts. On the other, the ambitious and pragmatic Merchants, constantly chasing fame and profit. Caught between them is the Monarch, striving for a peaceful revitalization for Varze—if only it can happen before the city tears itself apart with an all-out revolution. And the Games might make the perfect opportunity for the factions to make their first moves.

As you prepare for the Games, you must also navigate this factional strife. How will you forge your path to victory? Will you hone your blades, charm the public with your silver tongue, try to get ahead of your opponents with your careful observation of their strengths and weaknesses, or just cheat your way to the top? Will you dive into politics, currying favor with one faction or the other; or will you try to float aloof above them? Do you dare to seek wisdom in the stars, or from forgotten ancient tomes? Whatever path you take, your old rival is right on your heels—and if you’re not careful, you’ll fall behind and lose your honor once more.

• Play as male, female, or nonbinary; gay, straight, bi, pan, or aromantic.
• Push Varze’s culture towards commerce or craft, peace or war, tradition or modernity.
• Compete in high-stakes tournaments to test your wits, strength, and eloquence!
• Regain your lost honor through a performance of stellar integrity—or deceive, and sabotage every single one of your opponents! And what will you do if you find yourself fighting in the ring against your true love?
• Uncover lost tomes of once-forbidden magic, and reveal the secrets of the stars!
• Romance your brooding childhood friend-turned-rival, a passionate glassworker Artisan, a shy and principled archivist, a charming and showy Merchant—or even the formidable Monarch herself.
• Negotiate peace between the warring factions and return the city to stability, or destroy them both—or fan the flames of revolution and let Varze burn!

Will you fight for redemption? Glory? Or to remake the world?

We hope you enjoy playing Games of the Monarch’s Eye. We encourage you to tell your friends about it, and recommend the game on Facebook, Instagram, Tumblr, and other sites. Don’t forget: our initial download rate determines our ranking on the App Store. The more times you download in the first week, the better our games will rank.


My So Called Interactive Fiction Life

Sharpee: Cloak of Darkness

Hopefully no one saw the last post I immediately unpublished. It was a mistake. I had asked Claude for a professional assessment and it somehow used "Senior Typescript Developer" as the perspective. I re-prompted as "Senior IF Platform Developer" and got the correct assessment. That just
Sharpee: Cloak of Darkness

Hopefully no one saw the last post I immediately unpublished. It was a mistake. I had asked Claude for a professional assessment and it somehow used "Senior Typescript Developer" as the perspective. I re-prompted as "Senior IF Platform Developer" and got the correct assessment. That just led me to finishing the work, which has finally reached a major milestone. Cloak of Darkness works!

Below is the transcript using a Text Service that emits the raw event messages. Eventually there will be a Text Service that displays an IF standard window, either via WebAssembly or direct to a web client (likely React). The Text Service would use the event data to query the world model for actual descriptions. We do have some system events that aren't hooked in yet. Those would show the parser and validation details for each command.

The story file is 860 lines long and is implemented directly with the standard library. This is sort of the "experienced developer" layer. One of the next steps is to design the fluent Forge layer, which will greatly reduce the author's coding requirements.

Still need to implement that Forge layer, a standard client and Text Service, documentation, and then a larger reference story. There is still a lot of "tree-shaking" to get through.

I'm too tired to truly enjoy the moment, but it is profound.

node run-platform.js
=== Cloak of Darkness (Static Platform) ===
A Sharpee IF demonstration

Moving player a01 to foyer r01
Engine started successfully

> look

=== Turn 1 ===

Game Events:
  [IF.EVENT.LOOKED] {"actorId":"a01","locationId":"r01","locationName":"Foyer of the Opera House","isDark":false,"timestamp":1755161981090}
  [IF.EVENT.ROOM_DESCRIPTION] {"roomId":"r01","includeContents":true,"verbose":true,"timestamp":1755161981091}
  [IF.EVENT.LIST_CONTENTS] {"items":["i01"],"itemNames":["velvet cloak"],"npcs":[],"containers":[],"supporters":[],"other":["i01"],"context":"room","timestamp":1755161981091}
  [ACTION.SUCCESS] {"actionId":"if.action.looking","messageId":"contents_list","params":{"items":"velvet cloak","count":1}}

Location: Foyer of the Opera House [r01]

> trace

=== Turn 2 ===

Game Events:
  [COMMAND.FAILED] {"reason":"Could not match input to any command pattern","input":"trace"}

Location: Foyer of the Opera House [r01]
Error: Could not match input to any command pattern

> trace parser on

=== Turn 3 ===

Game Events:
  [COMMAND.FAILED] {"reason":"Could not match input to any command pattern","input":"trace parser on"}

Location: Foyer of the Opera House [r01]
Error: Could not match input to any command pattern

> examine cloak

=== Turn 4 ===

Game Events:
  [IF.EVENT.EXAMINED] {"targetId":"i01","targetName":"velvet cloak","hasDescription":true,"hasBrief":false,"isWearable":true,"isWorn":false}
  [ACTION.SUCCESS] {"actionId":"if.action.examining","messageId":"examined_wearable","params":{"description":"A handsome cloak of velvet trimmed with satin, and slightly splattered with raindrops. Its blackness is so deep that it almost seems to suck light from the room.","isWorn":false}}

Location: Foyer of the Opera House [r01]

> trace validation on

=== Turn 5 ===

Game Events:
  [COMMAND.FAILED] {"reason":"Could not match input to any command pattern","input":"trace validation on"}

Location: Foyer of the Opera House [r01]
Error: Could not match input to any command pattern

> west

=== Turn 6 ===

Game Events:
  [IF.EVENT.ACTOR_EXITED] {"actorId":"a01","direction":"west","toRoom":"r02"}
  [IF.EVENT.ACTOR_MOVED] {"direction":"west","fromRoom":"r01","toRoom":"r02","oppositeDirection":"east","firstVisit":true}
  [IF.EVENT.ACTOR_ENTERED] {"actorId":"a01","direction":"east","fromRoom":"r01"}
  [ACTION.SUCCESS] {"actionId":"if.action.going","messageId":"first_visit","params":{"direction":"west","destination":"Cloakroom"}}

Location: Cloakroom [r02]

> trace parser off

=== Turn 7 ===

Game Events:
  [COMMAND.FAILED] {"reason":"Could not match input to any command pattern","input":"trace parser off"}

Location: Cloakroom [r02]
Error: Could not match input to any command pattern

> look

=== Turn 8 ===

Game Events:
  [IF.EVENT.LOOKED] {"actorId":"a01","locationId":"r02","locationName":"Cloakroom","isDark":false,"timestamp":1755161981099}
  [IF.EVENT.ROOM_DESCRIPTION] {"roomId":"r02","includeContents":true,"verbose":true,"timestamp":1755161981099}
  [IF.EVENT.LIST_CONTENTS] {"items":["i01","s01"],"itemNames":["velvet cloak","brass hook"],"npcs":[],"containers":[],"supporters":["s01"],"other":["i01"],"context":"room","timestamp":1755161981099}
  [ACTION.SUCCESS] {"actionId":"if.action.looking","messageId":"contents_list","params":{"items":"velvet cloak, brass hook","count":2}}

Location: Cloakroom [r02]

> trace off

=== Turn 9 ===

Game Events:
  [COMMAND.FAILED] {"reason":"Could not match input to any command pattern","input":"trace off"}

Location: Cloakroom [r02]
Error: Could not match input to any command pattern

> hang cloak on hook
Cloak hung on hook - bar is now lit

=== Turn 10 ===

Game Events:
  [IF.EVENT.PUT_ON] {"itemId":"i01","targetId":"s01","preposition":"on"}
  [ACTION.SUCCESS] {"actionId":"if.action.putting","messageId":"put_on","params":{"item":"velvet cloak","surface":"brass hook"}}

Location: Cloakroom [r02]

> east

=== Turn 11 ===

Game Events:
  [IF.EVENT.ACTOR_EXITED] {"actorId":"a01","direction":"east","toRoom":"r01"}
  [IF.EVENT.ACTOR_MOVED] {"direction":"east","fromRoom":"r02","toRoom":"r01","oppositeDirection":"west","firstVisit":true}
  [IF.EVENT.ACTOR_ENTERED] {"actorId":"a01","direction":"west","fromRoom":"r02"}
  [ACTION.SUCCESS] {"actionId":"if.action.going","messageId":"first_visit","params":{"direction":"east","destination":"Foyer of the Opera House"}}

Location: Foyer of the Opera House [r01]

> south

=== Turn 12 ===

Game Events:
  [IF.EVENT.ACTOR_EXITED] {"actorId":"a01","direction":"south","toRoom":"r03"}
  [IF.EVENT.ACTOR_MOVED] {"direction":"south","fromRoom":"r01","toRoom":"r03","oppositeDirection":"north","firstVisit":true}
  [IF.EVENT.ACTOR_ENTERED] {"actorId":"a01","direction":"north","fromRoom":"r01"}
  [ACTION.SUCCESS] {"actionId":"if.action.going","messageId":"first_visit","params":{"direction":"south","destination":"Foyer Bar"}}

Location: Foyer Bar [r03]

> examine message

=== Turn 13 ===

Game Events:
  [IF.EVENT.EXAMINED] {"targetId":"y01","targetName":"message in the sawdust","hasDescription":true,"hasBrief":false,"isReadable":true,"hasText":true}
  [ACTION.SUCCESS] {"actionId":"if.action.examining","messageId":"examined_readable","params":{"description":"The message, neatly marked in the sawdust, reads...","text":"You have won!"}}

Location: Foyer Bar [r03]

> read message

=== Turn 14 ===

Game Events:
  [IF.EVENT.READ] "You have won!"
  [ACTION.SUCCESS] {"actionId":"if.action.reading","messageId":"read_text","params":{"item":"message in the sawdust","text":"You have won!"}}

Location: Foyer Bar [r03]

=== Story Complete ===

Monday, 11. August 2025

Renga in Blue

Robots on Terminus IV: Victory of the Machines

(Continued from my last post.) I suspect I am near the end but am unable to find whatever magical parser combination is needed to win. I, for one, welcome our new robot overlords, who will no doubt get confused whenever they have to play chess against an Atari 2600. Continuing from last time, I had […]

(Continued from my last post.)

I suspect I am near the end but am unable to find whatever magical parser combination is needed to win. I, for one, welcome our new robot overlords, who will no doubt get confused whenever they have to play chess against an Atari 2600.

Via Brian Blackie.

Continuing from last time, I had left off on a monolith where I was unclear how to interact with it. The monolith is the entrance to a secret robot facility, with an invasion force of spaceships you’re supposed to stop.

The right command is PRESS, either PRESS RED or PRESS BLUE. Except red summons a robot who shoots you so you should choose blue.

Inside is an elevator, which switches the verb from PRESS to PUSH. I’m generally a fair hand at experiencing such oddities, but I can imagine another player getting hard stuck right here.

Red makes the elevator go up, green makes it go down. You can go up to the top of the monolith but there’s nothing there (other than confirming the logic behind the elevator); down one floor is death because of a robot that shoots you on sight, but down two floors is safe.

There are still robots around, but you can shoot them with the LASER GUN from back in the armory.

To the west is an “underground launch area” with “hundreds of spaceships”. You can (after blasting a robot guard) hop in one, and find it is broken because of a hole in a control panel.

The hole is easily fixed by the lever from the slot machine; you can then pull the lever to zip over to the spaceport where your own vessel is (and back).

LEAVE CRAFT is needed to exit, even though you enter by walking SOUTH from the ship bay.

There’s also a store room with a PINCH BAR (another robot, again blastable) and a vent that can be unscrewed with the loose screwdriver from back at the original spaceport. This leads through a vent to a COMPUTER COMPLEX.

I am 99% sure the idea here is to then set the detonator to blow up the computer center, make a beeline back to the ship via jury-rigged slot machine lever, and save the galaxy. The problem is I have no idea how to get the explosive device to work. The EXPLOSIVE is described as having a dial, and dropping the explosive creates a bug in the inventory where the second line mentioning the dial is still listed with the I command. There’s additionally a DETONATOR whose operation is mysterious.

The unfortunate thing here past some of my prior games (like Danger Island requiring GET IN) is that this involves multiple items, so it is possible I need to do things with very specific object placement or command sequence; maybe TURN DIAL is a correct command (otherwise it gets YOU CANT) but only at the right moment.

I do appreciate the author going with “secret base in an inhabited area” rather than another barren planet; I also thought the atmosphere of the robot base came off well. The parser simply is not good at supporting whatever it is the author planned for the last steps.

I am incidentally still having to say “the author” even though I have a little more documentation on the company Antarctic Software. Other than this game they wrote The Caves of Time, Detention Center on Nebulon, and Intelligence Service Adventure, all lost media. I don’t know if they did more; they were officially founded as a company on 18 May 1983 so I suspect the 1983 date is right, and lasted all the way up to July 1989 in a commercial address suggesting it was run as a computer store for its lifetime (rather than the games being just from an ambitious “bedroom hacker”).

Address via Google Maps. Now a hair salon, not someone’s house.

We will be seeing more of New Zealand, as 1983 also saw the launch of the Sega SC-3000. The computer got crushed in other territories, but companies like Atari weren’t paying much attention to New Zealand, giving Sega an opportunity to become enmeshed in the cultural fabric.

Back page of November 1983 issue of Computer Input.

For now: a return to Europe, and the country of Denmark, another new visit for the project.


My So Called Interactive Fiction Life

Sharpee and Creating IF

I've written about this before, but thought I'd swing back around to it because it's becoming clear Sharpee will be much more than I planned.I have been trying, like so many other programmers, to build a new or different platform since the 90&
Sharpee and Creating IF

I've written about this before, but thought I'd swing back around to it because it's becoming clear Sharpee will be much more than I planned.

I have been trying, like so many other programmers, to build a new or different platform since the 90's. This has always revolved around how Inform and the Z-Machine work since that was my primary experience.

In 2011, Textfyre released two commercial games using a new implementation of Glulx, but using a different I/O library. Glulx's default is glk. Text introduced FyreVM, which was based on Channel IO (which was just a list of key/value pairs). This system would emit output to these channels and then a client could create its own layout. We developed a Silverlight client, a web client, but also allowed the code to gracefully compile to glk. I built some Windows implementations and a client/server implementation called Zifmia. These were good lessons for how a functioning IF platform works.

Textfyre eventually shut its doors and I was more or less burned out on IF for many years. I was also recently divorced, crushed by the 2008 financial disaster, and raising five kids. There wasn't a lot on my mind except work and kids.

I chased a different startup during this time called Wizely, which had I just put out (the UX was complete and the code was mostly done), the data today would be worth millions to an AI company. But a Q&A context app seemed overwhelmed by Machine Learning at that time.

I had always wanted to build my own platform because I was frustrated with Inform and other tools. I could never get comfortable with Inform 7's nomenclature. Even the cook book didn't help. I would continually struggle to implement even simple things in I7. It seemed very foreign as a programming tool. I was also looking at the foundations of IF platforms and seeing that there might be other ways.

All of the major IF platforms rely on a virtual machine, which in today's world has no meaning. WebAssembly is mature, NodeJS is mature. Even C# is cross-platform. There's just no need to constrain IF to a virtual machine anymore. The other fundamental problem is that IF uses PRINT statements and concatenates output as a turn is executed. I don't think anyone has quantified how much effort and time this takes; to manage spacing, punctuation, and other types of concatenation scenarios.

I started hand-writing code several years ago in C#, since that's my go-to platform. I had thought to implement a bi-directional graph data store and got pretty far down that rat hole, before ChatGPT arrived. Then I got a little further down the road with ChatGPT, but at that time, no LLM had enough training data and there were no reasoning engines to act as a true coding partner.

I would start, stop, get angry, then stop. At that point I switched gears because I saw that the remainder of my technical career would require deep knowledge of GenAI and how it integrates into Fortune 1000 technical spaces. (I work in the business world). I pivoted from wanting to build an IF platform, to explicitly requiring that GenAI do most of the work. I would develop guardrails and "ways of working" that took the raw power of GenAI and corralled it into a usable system. For two years I was adamant that this was simply not possible with the existing models and tools. I stated this loudly on LinkedIn and for the most part my predictions have held.

Side Note: No, there will be no AGI or Skynet to take over the planet. It's really as simple as a vector database has end points. Those end points aren't aware of each other until a human points out a connection. There is no technology that would enable those end points to randomly find each other and discern new end points. There is no technology that mimics the synaptic nerves of a human brain. Asimov posited the Positronic Brain in his Robot novels, but that tech doesn't exist and no one knows how to make one.

Then things changed for GenAI. First of all, I switched to Anthropic Claude because they were ahead of OpenAI and also seemed more interested in developer support and tooling than other GenAI makers. I know this will get a laugh, but I also see Anthropic as the least evil out of all of the GenAI companies. Anthropic has never trained a model on images or video. Yes, they have trained on copyrighted text, but I'm mostly focused on programming, and would never use an LLM to write my stories for me (eww).

The copyright thing is going to figure itself out eventually. Is it fair use? Based on our current definition, it's subjective. I think money and power are going to decide where the fair use line is and it's likely to fall on the GenAI side. It might be extremely difficult to prove "material harm" where text is concerned. Images and video have very easy to prove material harm claims and I do want to see OpenAI and others pay for training on artist's works.

Anyway, Claude gradually improved and I was able to make strides in my IF platform project. I eventually realized Claude was a mid-level C# programmer and asked it to rank the top ten programming platforms in ABC categories where A was its strongest. C# landed in the B category. Python and Typescript were in the A category. I started doing experiments, converting my C# ideas into Typescript ideas. It became very clear that Claude was significantly better at Typescript. So I switched Sharpee from C# to Typescript (though now the name makes no sense).

RankLanguagePopularity ContextClaude's ExpertiseNotes
1PythonWeb development, data science, AI/ML, automationExtensive knowledge of syntax, libraries, frameworks, and best practices
2JavaScriptWeb development, Node.js, full-stack applicationsDeep understanding of ES6+, frameworks (React, Vue, Angular), and Node.js ecosystem
3JavaEnterprise applications, Android developmentStrong grasp of OOP, Spring framework, and enterprise patterns
4TypeScriptType-safe JavaScript developmentExcellent knowledge of type systems, interfaces, and modern TS features
5C#Microsoft ecosystem, game development (Unity)Very good understanding of .NET, LINQ, and modern C# features
6C++Systems programming, game engines, performance-critical applicationsGood knowledge of STL, memory management, and modern C++ standards
7GoCloud infrastructure, microservicesSolid understanding of concurrency patterns and standard library
8RustSystems programming, memory safetyGood fundamentals, ownership system, and safety concepts
9SwiftiOS/macOS developmentDecent knowledge of syntax and iOS development patterns
10PHPWeb development, content management systemsVery good understanding of modern PHP, frameworks like Laravel

Then Anthropic released their Desktop app with MCP file system capabilities. This was a practical leap forward, though context windows were still too small for a complex architecture.

Sharpee and Creating IF
Claude Desktop

Another Side Note: LLMs provide context windows, which is based on the number of tokens they can juggle when determining a response. It's not just the model, but also what Anthropic allows you to use based on your subscription. At $20/month, even with Opus 4.1, you're fairly limited in what you can prompt. At $100/month it improves quite a bit. At $200/month it dramatically improves.

I first upgraded to $100/month and then $200/month. At this point I reversed nearly every opinion and observation I have had about using GenAI for writing complex software. You still have to write unit and integration tests. You still need to plan and have checklists. You need architecture or structural tests to make sure the LLM isn't going off the rails (which it WILL do). You need log files for builds and test runs. You need work summaries between sessions. A lot of LLM management goes on if you expect to get results.

I also switched to Claude Code, which is a command line interface that also can connect to your file system (in a controlled manner).

Sharpee and Creating IF

So with the MAX subscription, file access, and Opus 4.1, and my guardrails, I have found a way to coerce Claude into being a senior developer with some occasional bad habits that need to be managed. This is no small thing.

Had you asked me at anytime before April of this year, I would have said my research into building complex software with GenAI was a fantasy.

Now I think it's about 80% there and new tooling and guidelines are appearing that will close that 20% gap. Maybe not all the way, but even human developers have flaws and have to be managed.

Now Sharpee. As I said, I was trying to do a hobby thing. Build an IF platform that implemented some of my ideas about modern software architecture. Then I was trying to use GenAI to do a hobby thing. I was highly skeptical I would ever succeed. Yes, it's not done yet and there are still some hurdles. But it's pretty close. I've had Cloak of Darkness running a few times, with parsing issues. As it should be, those parsing errors led to implementation flaws (not designed flaws) and I've been working through those for about a week.

I think Sharpee will be a very powerful tool. It will let parser-based IF authors to work significantly faster than ever before. It will integrate with other tools. It will be extensible. I only realized this recently because Claude told me so. (this is a joke, I designed Sharpee to be what it is and I believe in it).

I submitted a story for IFComp. If I can get Sharpee working in the next week, I think I can get the code for my story done fairly quickly (using Claude). The story itself has been written for years, so implementing the text and puzzles is trivial. If not, I will still get a story published before the end of the year. The likely output will be WebAssembly, which can run anywhere from one file.

I'm aware there is a portion of the IF community that is adamantly against any use of GenAI. I'm in agreement on most of the reasons (power requirements, unapproved use of copyrighted material, and Sam Altman). But I'm also a pragmatic technologist. The genie is out of the bottle and it has transformed the world. It's not going back in the bottle no matter who wins what lawsuit.

And if I can tell my IF stories by leveraging a machine to do the coding, I'm on board. My stories are still my stories. They are still coming from my imagination and my dreams. No LLM will have written a single word of my IF stories. In my mind, Claude is just a well-trained code generator.


Choice of Games LLC

Coming Thursday, “Games of the Monarch’s Eye”—New author interview and demo!

Duel your greatest rival to win back your honor—or spark a revolution! It’s a tournament of steel, strategy, sabotage, or forbidden magic, in a fantasy world inspired by the Silk Road. Games of the Monarch’s Eye is a 238,000-word interactive “silk and sorcery” fantasy novel by Saffron Kuo. I sat down with Saffron to talk about their game and experience writing in ChoiceScript. Gam

Games of the Monarch's Eye

Duel your greatest rival to win back your honor—or spark a revolution! It’s a tournament of steel, strategy, sabotage, or forbidden magic, in a fantasy world inspired by the Silk Road.

Games of the Monarch’s Eye is a 238,000-word interactive “silk and sorcery” fantasy novel by Saffron Kuo. I sat down with Saffron to talk about their game and experience writing in ChoiceScript.

Games of the Monarch’s Eye releases this Thursday, August 14th. You can play the first three chapters today, for free!

This is your first time writing interactive fiction with Choice of Games, tell me a little about your interest in ChoiceScript style IF.

I was a 90s kid, so I was raised on a steady diet of video games and books, including choose your own adventure books. The branching and role playing in video games is always fun, but there is something really nostalgic and special for me in a text only medium, where the reader can become a co-creator of the experience. I always loved Choice of Games’ way of putting it: ‘fueled by the vast, unstoppable power of your imagination.’

What did you find most surprising about the writing process?

Managing all of the choices and stats was a handful, particularly as a first time interactive fiction writer. I’ve done some light coding elsewhere, which I was thankful for. I am also extremely grateful to my editor, Rebecca Slitt, for always helping me stay on track narratively. So many cliffs I faced. So many cliffs I stepped away from. Choice of Games encourages a lot of very intentional design to keep the work as a whole from getting too unwieldy. It would be possible to create a web so vast that a writer could never resolve half of the plotlines. However what surprised me most was the range of end results possible within this framework. Players can have vastly different experiences within this one universe, and that is really cool. It’s something I didn’t quite appreciate the scale of until I finished writing a game myself.

Who was your favorite NPC to write?

I have affection for everyone in this game, which I’m sure every author says. But, cracking Casiola’s shell as I was writing him/them/her was very fulfilling. While the player will control the depth of that relationship, and how much teasing he/they/she must endure, the long history between characters is an opportunity for peak yearning.

What inspired the setting and what influenced your work in this kind of fantasy genre?

When I started fleshing out the details of the Games and each round of the tournament, I was simultaneously thinking about the Silk Road. I became fixated on what our Westernized extractive narrative around it might have looked like with no Marco Polo main character syndrome. Those who lived on these actual historical trade routes had a very different view, of course. However, as I’m Chinese American, this definitely maintains a Western (and probably USian) lens in many ways.

The Game structure defined the acts, and the city structure led me to making the road itself the city, a series of outposts. Citizens would travel from outpost to outpost regularly. Each one could have its own customs while maintaining a larger Varzian culture. These two concepts melded into a traveling competition, where instead of hosting the Games in one city, each act would take place in a different outpost.

I stumbled on the double entendre of fortune (from the stars and fate; in your coin purse). Combined with the undertone of trade in this world, the two factions, the Merchants and Artisans, emerged quickly thereafter.

This was definitely a fun exercise of mixing and ‘using the elements you have’ in regards to worldbuilding.

Do you have some IF or text-based games you love that you’d want to share with our readers?

I have a deep affection for Harris Powell Smith’s Noblesse Oblige, part of the “Crème de la Crème” series. I enjoyed the first game, of course. Something about a drafty gothic house story with scowling love interests absolutely harpoons my interest, though. I’ve also just downloaded Stewart C. Baker’s Spire, Surge, and Sea and I’m eager to dig into that when life slows down a bit.

What are you working on next?

It’s been an unexpectedly busy summer, so I am trying to get my life back in order and prioritize reading for fun again. I have a few small narrative game ideas cooking (like a pedometer based story! and some solo TTRPGs, perhaps). It’s hard to stay away from longform, though, so I’m sure I will start dreaming up another IF work soon.

Sunday, 10. August 2025

My So Called Interactive Fiction Life

GenAI Meets Reality: An Implementation Blunder

We made a significant architectural mistake in Sharpee. It's time to own it.The DesignMonths ago, we designed an elegant trait/behavior system:Traits hold data (isOpen, capacity, weight)Behaviors contain logic (canOpen(), open(), canLock(), lock())Actions orchestrate behaviors using a validate/execute patternThe architecture was
GenAI Meets Reality: An Implementation Blunder

We made a significant architectural mistake in Sharpee. It's time to own it.

The Design

Months ago, we designed an elegant trait/behavior system:

  • Traits hold data (isOpen, capacity, weight)
  • Behaviors contain logic (canOpen(), open(), canLock(), lock())
  • Actions orchestrate behaviors using a validate/execute pattern

The architecture was sound. The behaviors were implemented. Tests passed.

The Failure

Fast forward to today: we discovered that zero actions actually use the behaviors. Every single action re-implements the logic that already exists in behaviors. The OpenAction checks if something is already open instead of calling `OpenableBehavior.canOpen()`. The PutAction recalculates container capacity instead of using `ContainerBehavior.canAccept()`.

Approximately 40% of our action code is duplicating logic that already exists, tested and ready, in the behavior layer.

How This Happened

Two factors collided:

1. AI eagerness to implement - When implementing actions, I (Claude) focused on making them work quickly rather than properly integrating with existing architecture. Each action was functionally correct but architecturally wrong.

2. Human oversight gap - The architectural pattern wasn't enforced through code review or tests. If it works, ship it - but "works" should include "follows the architecture.

The Fix

We need to:

  1. Add a required `validate()` method to all actions
  2. Refactor ~40 actions to use behaviors properly
  3. Add architectural tests to prevent regression

Estimated effort: 8-16 hours of refactoring.

The Lesson

Architecture without enforcement is suggestion.

We had beautiful behaviors that we didn't use. We need:

  • Linting rules or tests that enforce architectural patterns
  • Integration tests that verify delegation happens
  • Code review that checks architecture, not just functionality

This is embarrassing but educational. Sometimes you have to refactor 40% of your code base because you built the second floor without connecting it to the stairs.

The Response

We're not just acknowledging the failure - we're building systems to prevent it from happening again:

  1. Architecture Tests Now Active

We've created automated architecture tests in `/tests/architecture/` that:

  • Detect when actions bypass behaviors and re-implement logic
  • Track architectural debt metrics over time
  • Enforce dependency rules between layers
  • Run with every test suite to prevent regression
  1. Metrics Tracking

The `.architecture-metrics.json` file now tracks:

  • Behavior usage rate (currently ~0%, target 100%)
  • Direct trait manipulations (anti-pattern count)
  • Code duplication estimates
  • Validation/execution separation violations
  1. Comprehensive Refactoring Plan

Created `/docs/work/stdlib-behavior-refactoring-plan.md` with:

  • 10-phase refactoring approach
  • Clear validate/execute pattern documentation
  • ~40 actions to refactor
  • Success criteria and risk mitigation
  1. Enforcement Going Forward

The Takeaway

Finding a massive architectural failure is painful. But the real failure would be not learning from it. We're turning this blunder into:

  • Automated enforcement that makes the wrong thing impossible
  • Metrics that track our progress fixing it
  • Documentation that prevents future confusion
  • Tests that ensure we never make this mistake again

The behaviors are beautiful and well-tested. Now we're going to actually use them.

Saturday, 09. August 2025

Zarf Updates

Mysterium report 2025

Mysterium was in Atlanta this year. I didn't attend but I followed (some of) the streams. You can catch up on their Twitch channel; videos will be moved to Youtube once they're edited. This was not, sadly, a news-heavy year. This is because ...

Mysterium was in Atlanta this year. I didn't attend but I followed (some of) the streams. You can catch up on their Twitch channel; videos will be moved to Youtube once they're edited.

This was not, sadly, a news-heavy year. This is because the news from Cyan was layoffs in March and June. I know the company leads (Hannah Gamiel, Eric A. Anderson, Mark "Chogon" DeForest) are still there and keeping the lights on, but I don't know how many other folks are still there with them. Not a lot.

Thus, Cyan did not host a "state of the company" videocast this year. Nor did they, or anybody else in the know, make any announcements.

The only vibe we got was during the Q&A session for Philip Shane's ongoing documentary. (More on that in a bit.) Someone asked "Will Cyan's current in-production game become part of the documentary?" Shane didn't spill anything but there were some expressive winces from the team.

My read of the room: nobody's confident Cyan's next game will get made at all. But nobody's giving up on the idea either.


Fan presentations:

Guillaume Lethuillier talked about his Myst Graph project. See my blog post from a few months ago. The new info (to me) is about the Mohawk game engine, which Broderbund created to port Myst to Windows. (HyperCard was of course not an option on Windows.) Mohawk then became a cross-platform engine used by Riven (1997) and Myst Masterpiece Edition (1999), as well as some non-Cyan games. So any graph analysis of Riven would have to use a Mohawk parser -- perhaps based on the implementation that now exists in ScummVM.

Andrew D. Miller gave a conlang talk comparing the D'ni language with Klingon. (Miller has translated Sherlock Holmes into Klingon.)

He talked about how both languages are rooted in the fictional cultures that were part of their stories. Klingons were originally a Cold War mirror of the (optimistic post-WW2) Federation, mashed up with projected barbarian aggression. ("Everybody knew" the Eastern Bloc was crude and uncivilized.) Then the Soviet tropes fell away in the 90s and the barbarian stuff took over. In contrast, D'ni was pictured as an ancient, stable-or-ossified culture; their magical language comes from ideas of Adamic/Enochian "true knowledge". So Klingon sounds like (stereotypical) Russian, whereas D'ni is reminiscent of Hebrew.

(But this is superficial. The people who invented the conlangs didn't follow the structural features of Russian or Hebrew.)

Miller noted that Klingon and D'ni both use the Fantasy Apostrophe, but they use them differently.

He also answered one question I've always had: why does Klingon orthography use capital letters in that weird way? (E.g. "tlhIngan pIqaD".) Because Klingon was originally created for film actors to speak on camera! The capital letters indicate non-English sounds that the actors need to pay attention to.

Sharp question from the audience: Is it realistic that D'ni pronounciation is so regular? They have a ten-thousand-year-old literate civilization. In the real world, when a language gets written down, the orthography is frozen but the way people talk continues to drift. (English "knight" was not a confusing spelling for Chaucer.)

Miller's guess (this is not canonical) is that the D'ni reverence for their magical Age-writing language could have spilled over into extreme conservatism about their daily language. Maybe they had a strict "received pronounciation" which was enforced by their Guild of Linguists.

The Myst documentary

So, Philip Shane's documentary. He started it in 2016, filming the launch of Obduction. It's been in progress ever since. There's been years he said "I'll show the finished film at next year's Mysterium!" but the funding situation has proven rougher than he anticipated. The current status is "I'll make significant progress by the next Mysterium."

Please observe the delightful camcorder-on-the-Island effect on the front page of the Myst documentary web site. The camera's zoom button works. Web design by Elana Bogdan (who has been a NarraScope speaker, by the way).

Shane is working with Joshua Reinstein (producer, researcher, editor), who got involved around 2020. Ben Reichman is also involved; he's been going over the very large pile of Cyan historical video (1.5 terabytes!) recovered by the Videogame History Foundation. All sorts of goodies are turning up, including extended sequences filmed during the creation of the original Myst. Rand goofing around in the recording booth; Rand and Robyn sweating over legal pads full of puzzle design docs.

He showed some prototype gameplay footage for Myst Online concepts that got cut: paddling a canoe, swimming underwater, using a flashlight. He mentioned the idea of using voice-chat as a game mechanic -- yelling at the Ahnonay quabs to scare them. That's from this design doc:

A flowchart titled "Ahnonay Player Discovery Chart" -- "Sphere One First Time" Click for full page, although it's still hard to read.

This is a puzzle graph, but not a game-state chart in the familiar sense. Rather, it's a mind state chart: it shows the route(s) of player exploration and understanding. The legend for graph nodes lists link, puzzle, observe, discover, action, take note, deduce, reward, time-critical, gate, additional info. It looks like they made these charts for all the puzzle Ages of Uru. Maybe Myst 5 as well, given the timeline.

There was a doodle of a D'ni toilet: a toilet seat over an open Linking Book. Do not accidentally link to the Poop Age.

Shane showed some clips filmed at recent Mysteriums, including 2019 and 2023. (Mysterium is now a mask-required event, so it's easy to tell which year is which!) I spotted myself in the 2019 crowd:

A view of Myst fans sitting on the lawn at the Cyan office. Rand Miller's head is visible in the foreground, out of focus. He must have said something good because people are applauding. White hat, black t-shirt, and you can't see my face because I'm scribbling notes for my 2019 blog post.

(This marks my first return to the (doco) silver screen since Going Cardboard (2012), where you can find me in long-shot footage of a game convention. I'm pretty sure I was also caught in PAX B-roll for Indie Game: The Movie but I didn't wind up on screen.)

From documentary Q&A (quotes not exact): How much done? "I'd like to say it's 50%, but I'm going to say closer to 33.3%. There's a lot of editing to do." How long? "Feature-length." (Aiming for 90-120 minutes, because you always want to put in one more clip.) Music? Too early to say, but Shane has worked with Joel Goodman in the past. What camera does he use? Several, but his favorite is the Sony FX6.

As for the question of what will go in the documentary, and where it will end: "There's nothing I know that's absolutely in or out, except for Myst and Riven [which are in]." Shane points out that if you're making a film about living people, their lives don't stop. "At what point do you put the pencil down?"

I suppose "the ending has not yet been written" has never been more literally true.

Myst Online

Some sad news -- not from Mysterium; it got mentioned a couple of days later on the Cyan Discord. Apparently one of the core members of the fan Age-writing group has left the community.

I don't know what happened there. I wasn't around for whatever went down, and I have not asked anyone for private details. The person in question dropped out around the end of January. In May, their projects were marked as "suspended" on the Age list wiki page. (In-character announcement here.)

As I understand it, the person is not coming back, and the original model files for their Ages -- released and in-progress -- are lost. That includes the Descent remake, as well as Chiso Preniv, the library which is the hub for all fan Ages. Chiso is pretty load-bearing, so the remaining volunteers have worked to reverse-engineer its model and thus keep it open for future updates.

This loss has also taken down the Guild of Messengers site, a very long-standing Myst Online fan forum.

There will be a short announcement about the situation at the next All Guilds Meeting: Kirel neighborhood, Saturday the 9th, 13:00 KI time. (See below.)

I don't have a lot to say here except that volunteer-run communities can be fragile. We knew that. Plan for continuity.

Next year

Portland Oregon! I have absolutely no idea whether I'll go.


Update, August 9th

I attended the All Guilds Meeting in Myst Online. There were two announcements relevant to the above.

First, Korov'ev discussed the loss of the Guild of Messengers web site, which is now down and not expected to come back. The site included game-world announcements (e.g. Age releases), in-game chat logs (like the meeting I attended!), tutorials for running a fan server, and a calendar link.

Most of the content can be retrieved, either from Wayback (archived through July 2023) or from Korov'ev's own collection of chat logs. The calendar link is a Google calendar and is still available.

Plans for replacing the GoMe site are not settled. Floated ideas (for various pieces of its function) include an offshoot of the Guild of Writers wiki, a new wiki, a custom site hosted by another community member, or the r/Myst subreddit.

https://rel.to/, a community link hub, is also affected. This site is still up but nobody has access, so it is frozen now. I imagine it will fall over at some unknown future time.

At the end of the meeting, Calum Traveler (harleyTraveler263 on Discord) got up to give a prepared statement about the person whose disappearance triggered all this. My summary (not official) is:

  • The person is in "significant legal trouble"
  • We know very little except what is already public record
  • It's serious and will not be resolved any time soon
  • No matter how it resolves, the person does not intend to return to the Myst community

I am not using the person's legal name or handle in this post. It's easy enough to find from the links I've given, and a small amount of web searching will turn up public-record legal info. However, this post is not a primary source and I do not intend it to be a Google hit for the person's name.

Friday, 08. August 2025

Renga in Blue

Robots on Terminus IV (1983)

Today, this blog’s first encounter with New Zealand. It might not seem surprising offhand New Zealand had to wait until 1983 — their population in 1982 was about 3 million, ranking it between Armenia and Papua New Guinea — but they had a computer economy out of proportion to the population. Their first computer, in […]

Today, this blog’s first encounter with New Zealand.

It might not seem surprising offhand New Zealand had to wait until 1983 — their population in 1982 was about 3 million, ranking it between Armenia and Papua New Guinea — but they had a computer economy out of proportion to the population.

Their first computer, in a technical sense, dated all the way back to 1949 with the MONIAC, an analogue computer with a name that invokes the ENIAC. It was designed by Bill Phillips (he of the Phillips curve relating inflation and unemployment, the source of “inflation targets” in modern economies) in order to do macroeconomics via measuring the amount of fluid in various containers.

Philips with the MONIAC, sometime between 1958 and 1967.

They had their first personal computer club in 1977 (Brian Conquer in Auckland, who read about similar clubs in the United States) so they weren’t even that late to the scene, relatively speaking, and there were multiple home-grown attempts at computers: the MDL series, the Poly and the Aamber Pegasus. They all failed for related reasons that are useful to go into, as they reflect the general trouble New Zealand hobbyist computing had in the early 80s.

The first attempt (or rather series) was via MDL; John Lovelock founded Micro Processor Ltd. in 1978. They started with engineers and hobbyists in mind, but by the MDL-3 model tried to get into the educational market (due to the government looking to pouring a great deal of money getting into every classroom); notably the computers had a shared hard drive.

They never really stretched into “personal computing”; their MDL-4 model sold about 200 units before they ended trying to make computers altogether.

Second up is the Poly-1, designed in 1980 and entering production in 1980; it was named after Wellington Polytechnic where the designers Neil Scott and Paul Bryant worked, and launched with a many-thousand-NZD price tag. The government was making moves to put a computer in every classroom (like the UK) and the duo designing the Poly tried to make a computer specifically for that need, with the most notable feature being a proprietary networking feature connecting 32 of the computers together at once. Quoting Scott:

The original design was to create it, get it working properly, and then leave it. The network was completely automatic. You didn’t have to do a thing.

From Classic Computers NZ.

The government promised $10 million in sales to fill classrooms but only $64,000 in orders came in, as the overall order got nixed from above as overspending.

The third homegrown attempt was the Aamber Pegasus, by Technosys Research Labs. This time the commercial market was more in mind, but the price tag was still high: $1000 NZD (about $900 in historical USD; enough to buy a Commodore PET at launch). Via the manual:

The machine that we are offering, while being approximately half the price of competitive products, offers much more capability in terms of expansion and ease of use. Initially we are supporting four languages with the Pegasus, these being ASSEMBLER, BASIC, FORTH and PASCAL.

I’m going to be honest: despite the effort to put a variety of computer languages by default, the hardware (default 4K memory, and see video below) seems undercooked for the price.

It did even worse than the MDL systems or Poly: “There is uncertainty as to the number of computers manufactured, estimates range from a few dozen to around 100.” It tried to get into the educational market just like other companies did — adding on network capability — but all three got crushed by the same outside force: Apple.

The offer consisted of an Apple II plus computer, one Apple disk drive, the monitor III 12in green screen with integral stand, and 30 BASIC programming tutorial manuals all for $1200. The cost to schools is usually $4812.

They were cheaper than the alternatives (and flat-out better than the Aamber), and by 1982 had 89% of the high school market. It essentially held the same position of dominance in New Zealand schools that it did in the US, although some of the cheaper machines (like the ZX80) held position when a cheaper model was needed.

Polycorp (the most plausible of the three local competitors) tried to stop Apple with a protest to the government in regard to “dumping”, so a duty of $820 was added, which simply resulted in Apple increasing the price to $2020 (as the duty was written to apply to the “dumping price”, it no longer applied to the higher price tag).

Janie McKenzie, education manager at Polycorp in 1982, quoted as saying “we intend to be around for some time”. Not long after, the company collapsed.

The $820 add-on — and the fact New Zealand never grew their own low-cost computer — is actually the most important point of all the events above when it comes to understanding their home computing market. The whole period from 1975 to 1984 with the government at the time (led by Sir Robert Muldoon) was one of protectionism:

By placing high tariffs on imported items, the government provided protection to fledgling industries. The strategy was quite successful. Nonetheless, high tariffs made many imported goods expensive to consumers.

So, the “cheap end of the pool” hobbyists that flooded the UK had trouble getting started in New Zealand; a postmortem of sorts was written in 1987 which notes:

In New Zealand the sales tax priced the microcomputer beyond the reach of many potential hobbyists and it was not until the tax and licensing regulations changed that products were more readily accessible to the low end user.

The same postmortem (titled “Memo: Atari US. What plans for NZ? Reply: Ask Australia”) also highlights the other interlinked issue: the country was sort of an afterthought to Australia. Essentially, New Zealand received their computers and parts last compared to the larger markets. An Atari supplier who severed ties with the US is quoted as saying:

We were having trouble getting stock from the USA. At the moment we are still importing parts until another dealer takes over, but we are not importing either hardware or software. Existing stocks are being sold off and we are caretaking for spare parts.

All these elements put together mean despite the signs of a vibrant scene…

Club contacts from November 1982.

…it isn’t terribly shocking we have to wait until (probably) late 1983 for the first adventure game from New Zealand we can play. Specifically, Robots on Terminus IV by Antarctic Computing.

The “probably late 1983” there is because it the first ad we have for the game is from a December 1983 issue of Computer Input, a NZ-specific magazine without many copies available. There’s an ad in the November issue for only one game (the currently lost Detention Center on Nebulon) but the general sense I get is that there’s more ads dating back farther we just haven’t seen yet.

Photo provided by Brian Blackie.

Brian Blackie (who has the game on his site) actually has it marked at 1982 but he doesn’t have anything on the tape or packaging indicating that date; it’s certainly plausible. The ZX81 version (the only one extant of any of Antartic Computing’s products) is slightly quirky, with a period mark doing space and Z doing backspace; the ZX81 keyboard requires two button presses for backspace and I can understand trying to do something symmetrical to type a space, but it took a while for me to get used to playing.

We have landed on a planet to do a mission, I assume involving robots; I have no idea what “our mission” is. However, we have access to an armory on our ship with some heavy duty machinery, so I assume it involves killing robots somehow. In inventory is a “remote control” device to start, and there is a door with a sensor downstairs; the right action is to POINT DEVICE to open the door.

POINT is one of our rarer verbs, so it’s useful to pull open the verb list now (this is made by hand, not studying source code):

OPEN, PRESS, PUSH, PULL, TURN, SHOOT, WEAR, INSERT, LEAVE, THREAD, SCREW, UNSCREW, PLACE, POINT

Enough of these words (THREAD, PLACE, UNSCREW) live on the rare side that I expect there will be some surprise “isolate” verbs I haven’t run into on any game yet.

After some pointless searching for a space suit I realized this is a planet with a regular atmosphere we can just step out onto; the city is a regular city with regular aliens in it.

Disembarking, there’s a SCREWDRIVER at the landing bay, and to the north is a city street with a few venues, like an art gallery, a casino, a pub, and a department store. I guess we’re in Space Vegas.

The department store has some sand shoes we can just take (nobody seems to mind), and the gallery has what looks like a hint for something we will see in the desert. The pub is filled with creatures I haven’t been able to interact with and a coin that can be picked up; the coin can be taken over to the casino and the FRUIT MACHINE, but trying to pull the lever after inserting a coin causes the lever to break off.

Is the whole purpose of this scene to get a lever?

Finally to the north is a desert maze (again just like Vegas)…

…and the main result (other than a suspicious dry well along the way) is a mysterious monolith.

I have been unable to interact with the monolith in any way, but it doesn’t help that I’m not clear what noun is intended here (four letter parser, so “HUGE”, “STON”, “MONO”, “JEWE”, “RED”, and “BLUE” are all possible). There’s no walkthrough or other documentation, and I don’t have a good way of looking at source code, so there are likely a lot of brute-force attempts in my future. I certainly am intrigued; usually our planets have been completely abandoned, Space Vegas is a new setting.


My So Called Interactive Fiction Life

Sharpee Static Loading

[Written by Claude Opus 4.1, edited by David Cornelson]After months of development, the Sharpee Interactive Fiction Platform has reached a critical architectural milestone. We've successfully completed Phase 4 of our dynamic load refactoring – a major undertaking that's transforming how the engine handles parsers,
Sharpee Static Loading

[Written by Claude Opus 4.1, edited by David Cornelson]

After months of development, the Sharpee Interactive Fiction Platform has reached a critical architectural milestone. We've successfully completed Phase 4 of our dynamic load refactoring – a major undertaking that's transforming how the engine handles parsers, language providers, and extensions.

The Challenge: Dynamic vs Static

When we initially designed Sharpee, we embraced dynamic loading for maximum flexibility. Stories could load parsers and language providers at runtime, extensions could be plugged in on demand, and the system felt infinitely extensible. But as our test suite grew from dozens to hundreds of tests, we discovered the dark side of this flexibility: test instability, module resolution headaches, and unpredictable behavior when components loaded in different orders.

The breaking point came when we had 59 failing tests in our engine package. Tests that passed in isolation would fail when run together. Module resolution worked in nodejs but failed in vitest. The dynamic loading that gave us flexibility was now our biggest source of technical debt.

The Solution: Controlled Static Architecture

Our solution preserves the extensibility we love while bringing predictability to the system. Instead of loading parsers and language providers dynamically at runtime, we're moving to a model where:

  1. Platform packages define their parser and language combinations at build time
  2. Extensions are registered through well-defined APIs
  3. Stories declare their dependencies explicitly

This isn't a step backwards – it's a step towards production readiness.

Phase 4: Extension Methods That Work

The latest phase focused on making extensions truly functional. Here's what we accomplished:

Parser Extensions

parser.addVerb('xyzzy', ['xyzzy', 'plugh']);
parser.addPreposition('beside');

The key insight: vocabulary registration alone isn't enough. When you add a verb dynamically, you need to register both the vocabulary (for tokenization) AND the grammar patterns (for parsing). Miss either step, and your custom commands silently fail.

Language Provider Extensions

languageProvider.addMessage('custom.greeting', 'Welcome, adventurer!');
languageProvider.addActionHelp('xyzzy', {
    summary: 'Say the magic word',
    usage: 'XYZZY'
});

We discovered that the ActionHelp interface alignment was critical – the difference between `summary` and `usage` fields caused silent failures until we tracked down the type mismatch.

The Numbers Tell the Story

  • Before refactoring: 59 failing tests, unpredictable behavior
  • After Phase 4: 177 tests passing, 4 intentionally skipped, 0 failures
  • Build time: Reduced by 30% with deterministic dependency order
  • Test reliability: 100% consistent results

Architectural Decisions That Matter

During this journey, we've made several key decisions that will shape Sharpee's future:

Command History vs Event Source

We clarified that command history (for the AGAIN command) only stores successful commands, while the event source maintains a complete audit trail. This separation of concerns ensures players can repeat their last successful action while maintaining full system observability.

Pattern Storage Architecture

Instead of overloading the message system, we created dedicated storage for action patterns. This allows proper merging with standard patterns and maintains clean separation of concerns.

Test Isolation Strategy

We learned that sharing state between tests is a recipe for confusion. Each test now gets its own isolated engine instance, parser, and language provider.

What's Next?

Phase 5 will tackle the remaining module resolution issues in our standard library tests. We're seeing a curious situation where nodejs can resolve our modules but vitest cannot – likely a pnpm workspace or caching issue.

Beyond that, Phases 6-8 will:

  • Move query management to the platform layer
  • Create platform-specific builds
  • Update all documentation for the new architecture

Lessons Learned

This refactoring journey has reinforced several engineering principles:

  1. Test stability is non-negotiable – If your tests aren't reliable, your system isn't reliable.
  2. Dynamic flexibility has a cost – Sometimes constraints lead to better architecture.
  3. Type safety catches real bugs – That ActionHelp interface mismatch would have shipped without Typescript
  4. Incremental refactoring works – We've transformed the architecture while keeping tests green

Looking Forward

Sharpee is evolving from an experimental platform to a production-ready system. The dynamic load refactoring is just one part of this maturation. We're also working on:

  • A comprehensive book about building complex software with GenAI
  • Platform-specific distributions for web, command line interface, and Discord
  • A growing library of extensions and story templates

The journey from 59 failing tests to a stable, extensible platform has been challenging but rewarding. Each phase brings us closer to our vision: a modern interactive fiction platform that's both powerful for developers and delightful for players.

Stay tuned for Phase 5 – we're just getting started.


Follow the Sharpee project on GitHub.

Thursday, 07. August 2025

Choice of Games LLC

Saturnine—The Solar System needs an old android’s help.

Hosted Games has a new game for you to play! You are an android. Almost a thousand years of age, you’ve seen more wars and fought more battles than any human ever could. Your experience will soon be called upon, as you battle an ancient monster and fight to preserve the Solar System…or whatever else you hold dear. Saturnine is 33% off until August 14th! Jon developed this game using ChoiceScript, a
Saturnine

Hosted Games has a new game for you to play!

You are an android. Almost a thousand years of age, you’ve seen more wars and fought more battles than any human ever could. Your experience will soon be called upon, as you battle an ancient monster and fight to preserve the Solar System…or whatever else you hold dear.

Saturnine is 33% off until August 14th!

Saturnine is an interactive novel by Jon Matthieu where your choices control the story. It’s almost entirely text-based, with 700,000 words and hundreds of choices, fueled by the vast power of your imagination.

It is the year 990 AC. Earth is dead, forever claimed by the Calamity. Stars are unreachable, forever denied to human ambition. Only in the vastness of the Solar System humanity still survives, spiting the sentient machines that once tried to destroy it. Artificial Intelligence, a tool once used to shape space itself to human liking, is now an object of fear and a target of ceaseless hunts on every moon of every planet. You are a dying breed, though you’re determined to survive all the same.

You’ve spent almost a thousand years on the run, an android among humans, a machine among creatures of flesh. You’ve recently found a safe haven, perhaps even a family, on a nigh-forgotten Saturnian station. During a heist launched on behalf of your group, you encounter a group of meta-humans who pose great danger to you and your friends…but also present a unique opportunity.

  • Play as male, female, or nonbinary—or abandon silly human notions of sex and gender.
  • Travel around Saturn and its various moons, in a setting where every location is based on an existing astronomical object.
  • Fight superhuman foes with your advanced weaponry, powerful fists, silver tongue, or the lightning dancing between your fingers.
  • Romance one of your robotic friends—or perhaps one of your quasi-human pursuers.
  • Determine your place, goals, and values in the bizarre world 1207 years into our future.
  • Reconcile with humanity and forgive past wrongs…or embrace your hatred as part of you.

Just what kind of android will you be?

Jon developed this game using ChoiceScript, a simple programming language for writing multiple-choice interactive novels like these. Writing games with ChoiceScript is easy and fun, even for authors with no programming experience. Write your own game and Hosted Games will publish it for you, giving you a share of the revenue your game produces.

Wednesday, 06. August 2025

Renga in Blue

The Palms: Mark of the Hummingbird

I’ve finished the game, and my previous posts are needed to understand this one. Before continuing the events of last time, two points to hit: 1. I breezed past this screen fairly quickly from the kidnapping at the start… …but just to be clear, this is showing the protagonist getting hit on the head by […]

I’ve finished the game, and my previous posts are needed to understand this one.

Via POPCOM June 1983, The Palms being advertised alongside the import game Pinball Construction Set.

Before continuing the events of last time, two points to hit:

1. I breezed past this screen fairly quickly from the kidnapping at the start…

…but just to be clear, this is showing the protagonist getting hit on the head by a coconut, where they wake up to find their girlfriend kidnapped; this is not them getting walloped by the kidnapper.

2. There was a cave where I tried to enter but I didn’t know why I died. Kazuma Satou in the comments mentioned a message about a Moray eel killing us. I have now experimented multiple times and found sometimes the eel response shows and sometimes it doesn’t. The game here seems to be outright buggy (mind you, it might be an emulator issue). Even when it does give the eel message, there’s a delay of a turn (and the game then gives just the “keep trying” message) so it is easy to be confused. For the events that follow with any deaths, I’ve seen similar behavior: sometimes an explanation appears, sometimes it doesn’t. Fortunately there’s nothing like the timed deaths at the start where I was genuinely unsure if my character was falling into the ocean somehow (as opposed to the girlfriend left waiting too long).

Continuing the story, there was a small HOLE I was unable to interact with but somehow I hadn’t tried LOOK, which displays a zoomed-in screen showing a crab.

Unfortunately, the crab turns out to be, while not quite a red herring, mostly useless anyway. If you open the door with the octopus on the wrecked ship, you can appease it with the crab, but you don’t make any “progress”; it just prevents you from dying. This is the sort of mechanic that makes sense in a gamebook (amulet of protection, good for one bad choice) but in an adventure game with a frequent save-reload cycle happening anyway the whole sequence ought to really just be ignored.

Speaking of the wrecked ship, the only reason to go in there is to find the bar, procure the wine…

…and then bust out via BREAK WINDOW. The NAILPULLER gets lost on the last door so I’m not sure what we’re using to bust it open; I assume our fist.

That’s almost everything missing from the big ocean area, except for one spot back at the ruin (which I didn’t find until later).

Over on the west wall there’s what looks like a hole; I tried LOOK HOLE with no dice, but found the right action was LOOK WALL. (In retrospect, there’s tiny writing too.) The “1983” will show up again near the endgame.

To escape the ocean section entirely requires going to a large rock to the west of the eel cave (far NW of the map).

Kazuma Satou’s comments ended up being helpful again, and I’ll just quote verbatim:

Given the circumstances, linguistic ambiguities may be throwing you off again, so let me just mention that the word ROCK is referring specifically to only ONE of the three rock-like objects that you can see on screen. Try using some synonyms to interact with the other two! (This likely comes down to semantic nuances between the words 岩 “iwa” and 石 “ishi” that didn’t transfer 100% cleanly into the context of an English-based parser).

I had run through a good chunk of my verb list previously, but I was merely referring to the ROCK (the big rock). I was instead supposed to be referring to a STONE (one of the smaller … er, rocks). 石 is “small rock” explicitly; while English does tend to imply “stone” is something smaller, it also uses rock as a straight synonym.

Trying to MOVE STONE asks which one; you pick the right one (no particular logic, but there’s no punishment for starting with left) and this reveals the most curious lost-in-translation piece of the game.

The exact text is

スイドウノ コック(COCK)ノヨウナモノガアリマス。

and I don’t think the authors meant a ribald joke, nor does that look like a rooster, so I’m guessing they meant something like a faucet handle that can turn left or right.

TURN COCK then requires you to say WITH LEFT (not TO LEFT or just LEFT) in order to open a passage. I admit I had enough confusion and concern at this point I peeked at a walkthrough.

This leads to a new dark area, where you can go up and find an underwater city.

(More Micro Cabin Mystery House vibes going on.)

From here you can go south, west, or north. West straightforwardly leads back to the ocean (in case you’ve missed something), but south and north are messier: I hit the Parallel Universes problem. Since it’s been a while since the Problem has surfaced, an explanation: you are playing an adventure game, and manage to go from place A to place C, no problem. On a second trip through the game (for whatever reason) you try again going from A to C but now get stopped by some obstacle that wasn’t there before! You are in a parallel universe where a puzzle you previously didn’t even know was there has now appeared, and sometimes it takes effort to realize what changed.

Here, fortunately, the change was very slight, but let me narrate my first pass-through: I went south first, and found some statues.

While there, I started thinking that since I’m no longer underwater, I should be able to ditch the DIVINGSUIT, so as an experiment I tried DROP DIVING and it worked. Then I went back to the corridor and tested the north exit next, finding myself in a forest with a guard.

We’ll address the guard in a moment: the important thing is I ended up needing to go back through the same section on a different save, and found that I could no longer go north into the forest as seen above. But why?

Quite simply: dropping the diving suit at the statues solved a puzzle (pressure plate of some sort on the destroyed statue). My second time through, I dropped the diving suit as soon as I got to the underwater city since I knew it was safe, not realizing that it would create a parallel universe! This also indicates I got Very Lucky in accidentally solving what could have been a very difficult puzzle.

Back to the guard! Fortunately not a hard puzzle: I (almost) immediately tried GIVE WINE and it worked.

(The “almost” is because I tried directions first, and the game said NO!!!! like we were back in Mystery House again. That message appeared all the time as the default “you can’t do that” message.)

It’s easy to miss that you can also TALK GUARD after plying him with wine; he’ll mention the word HUMMINGBIRD (which, like 1983, will come up later). Exploring the forest now, to the east there’s a rabbit you can just nab…

…and to the west is a boat that is deadly. Just ignore the boat: it’s a red herring.

Heading north lands the player in a city; wandering around a bit I found a key…

…and another guard.

Using GIVE doesn’t work here but you can DROP RABBIT and the guard will be distracted and chase it. This lets you get past the bridge to an ARENA, with a door that can be unlocked with the KEY.

That’s a lion coming after us, and fortunately, I had been dutifully testing SHOUT everywhere I could; here it is finally useful, and it causes the lion to run away.

(This is close enough to Scott Adams Adventureland and the bear that I wonder if they’d had exposure to that game as well. I didn’t cover it here, but Adventureland did have a graphical version for Apple II by this point so I could see Hummingbird playing an import.)

Next up a SANCTUARY is visible in the distance but our way is blocked by BARRACUDA, but we’re also pretty low on items. The right action is to THROW BOTTLE — the one from the skeleton in the ocean.

Now we’re almost down to nothing, and I admit I had to check the walkthrough again to SHOUT HUMMINGBIRD. This reveals a door…

…and I had to check the walkthrough yet again, but in my defense the walkthrough author had a lot of trouble here too. The keypad suggests you’re supposed to enter 1983, but the right sequence is PUSH BUTTON followed by PUSH 1983. We’re almost done!

Further onward is a room with a RING, a HANDKERCHIEF, and a wall that has a smudge. WIPE WALL is sufficient to reveal a hummingbird.

Then you can PUT RING and find yourself mysteriously back at the beach.

You are restricted from doing anything other than picking up that coconut from the start of the game we weren’t allowed to touch before. And voila:

The game leaves the interpretation up the player, as this follows directly with credits.

(Scrolling, so I’ve concatenated some screens together.)

Rob did some sleuthing in the comments to help narrow down who everyone is. First off, 1983 is the year a different company (Starcraft) started publishing translations of the Sierra On-Line games into Japanese (including Time Zone with all the screens redrawn!) They also later re-did the Sirius games Kabul Spy and Blade of Blackpoole, and on the packaging for Blade of Blackpoole there’s some helpful information:

This discusses Masanori and Etsuko Takano, a team of programmers the profile compares to Ken and Roberta Williams. It mentions that after their first two games (The Palms and Knight of Wonderland) they formed their own company so they could work from home. Knight of Wonderland has a more straightforward list of credits:

Producer: Mamoru Imanishi
Scenario: Hiroshi Imanishi
Chief Programmer: Masanori Takano
Assistant Programmer: Etsuko Takano
Graphics: Etsuko Takano and Fumiko Kasai
Art Director: Yutaka Kawamura

With The Palms:

Directed by: アット マ-ク
Program by: DR.KASARI
Graphic Design by: Hiroshi & Etsuko
Color Design by: Etsuko & Yuta
Coopelation: Ryuchan & Masako

Mamoru, founder of Humming Bird Soft, almost certainly was the producer of both games, so he was “アット マ-ク”, that is, “at mark” or “@”. Hiroshi, the brother, also wrote the scenario; he’s listed as working on Graphic Design in the credits for The Palms (maybe the scenario too, but uncredited?). Dr. Kasari must be referring to Masanori and Etsuko Takano; Etsuko is also given as working on graphics, and “Yuta” who is cited as doing color design must be Yutaka Kawamura (the one who was art director on Knight of Wonderland).

There’s some more clearing up to do, but I figure it can wait until Humming Bird returns again in 1983 with Knight of Wonderland.

Mamoru from LOGiN October 1984.

Regarding the game itself–

Even if it was terrible to play, it would hold a novel place as really being Japan’s first game in the absolute style of the Apple II imports (excluding, again, The Odyssey which arrived slightly before). However, I generally enjoyed myself despite the language difficulties and the gauntlet of parser issues near the end.

While I’ve mentioned both Sierra and Micro Cabin references, this game also clearly points to Omotesando Adventure as well. What Omotesando established is a very in-joke sort of game where the player is dealing with the company that made the game; here, the Hummingbird references start from the very first screen and the player is clearly infiltrating “the temple of the Hummingbird” in the same manner as sabotage in Omotosando. It still comes off as the Japanese industry in their final “learning phase” and things are going to get much stranger as we get deeper into 1983. For the most part, because I already have them sorted, I will be trying to follow the history chronological by month.

If you’d like to jump ahead, the Game Preservation Society in Japan did a writeup of the game Recapture, a game that diverged from fantasy into satire.

The protagonist, a researcher at Fly Pharmaceuticals, is a young man who is putting all he has into a “100% Perfect Male Contraceptive” (according to the manual). He succeeds and creates the male contraceptive “Kondoh-Muyo” (literally “condomless”). However, rival company Mosquito Pharmaceuticals will not take this lying down and steals the research files from our protagonist while he is out drunk while celebrating.

Also, special thanks to the folks at Gaming Alexandria who helped me through some language troubles.

Monday, 04. August 2025

Zarf Updates

The age of bronze and steel

Here's a story I heard last night about 3D printing. (I'm not in the 3D-printing scene. I know people who are, though. And it's an interesting story, what the hell. If I can blog about dirty sea shanties, I can blog about the additive manufacturing ...

Here's a story I heard last night about 3D printing.

(I'm not in the 3D-printing scene. I know people who are, though. And it's an interesting story, what the hell. If I can blog about dirty sea shanties, I can blog about the additive manufacturing industry.)

A couple of months ago I retwooted this message about the end of a particular 3D-printed-metal process:

Binder jetted steel with bronze infiltration is no more: the last source has discontinued the technology. All service bureaus that offered this material have taken it down, which tends to confirm my (and their) understanding that no one is continuing it.

20 years we dreamed together. It could do what other binder jetting processes couldn't and can't, and I built my art practice around it. Well, the market has spoken.

If you own a piece in this material, now you have a historical artifact.

--@bathsheba, Jun 10

I followed up with these two objects I own that were printed this way:

Two bronze-colored metal objects. On the left is a curved geometric abstraction with tetrahedral symmetry. On the right is a Myst marker switch. Each is about three inches high. "Zarf" (Bathsheba) and a Myst marker switch (Cyan).

So what happened?

If you look back to 2021, a company called Desktop Metal was buying up a whole chunk of the 3D printing industry. That included ExOne, the originator of this particular metal-printing process.

They immediately jacked up the process's sticker price. That marker switch model cost me about $100 in 2018 -- awfully good for a one-off custom metal object. In 2022, it would probably have cost me three times that. Seems that ExOne was pricing their stuff low to build a market and make them look like a good buyout target. (Sound familiar?)

Then Desktop Metal started to realize that enthusiastic acquisition made for great headlines but wasn't, you know, a business model. So they started looking to be acquired. For a while it was Stratasys, but Stratasys got cold feet and backed out. Then they talked to Nano Dimensions, but Nano also tried to back out. At this point Desktop Metal was making ominous statements -- if they didn't get acquired, they were doomed as a company.

DM wound up suing Nano to complete the acquisition. That finalized in April. Guess what? Last week Desktop Metal filed for bankruptcy anyhow. Guess it was doomed either way.

They say the decision was made by DM's "independent Board of Directors", but you don't have to read between the lines to see that Nano let them go hang. Nano is selling off whatever pieces of DM they think have any remaining value. The rest is trash.

(The Bloomberg article is titled "Desktop Metal Files Bankruptcy After Lawyers Demand Unpaid Fees". Here's an amusing quirk of the merger biz: DM's lawyers beat Nano's lawyers in court, so Nano had to acquire DM. Including their debts. Now DM's lawyer bill is on Nano's desk! What if Nano just tears it up? Matt Levine's column is a great primer for this sort of hilarity.)

Okay, so, that metal-printing process? It got spun off after the 2021 ExOne acquisition. Maybe more than once. It looks like nobody could make a go of it, even at the higher price. Probably the engineers who knew how to run the machines either retired or got shuffled out. By June, there just wasn't anybody left making bronze-steel parts; customer-facing sites yanked the material from their listings.

I am told that the machines themselves were probably not junked. They have other uses. You can do a steel-powder print and then sinter the part to solid steel. That's a steel-printing process -- but the parts shrink during sintering, and they don't shrink evenly. You can't do the kind of art prints I showed above.

The bronze-infiltration step solved that problem. You soak liquid bronze into the steel-powder print, driving out the air without changing the original dimensions. But that was fussy. It required hands-on experience to do the infiltration; it required hands-on experience to do the finishing.

(A lot of the stories from that part of industry were like, "There was only one guy who knew how to do that patina, and then he retired." Guy by guy, the material went away.)

So, as one article notes, a whole slew of other companies and technologies are facing the same fate. And if that sounds familiar, think about the Embracer Group in the games industry. Went on an acquisition spree around 2021; tried to get acquired; deal fell through. The studios they acquired are now collateral damage.

I suppose the lesson is that it's not just games. Technologies can vanish. Your job can vanish. Companies that you thought were parts of the landscape can vanish. Cities can vanish. The way you live can vanish.

Sorry -- I said it was a story. I didn't say it was a happy story.

Sunday, 03. August 2025

Renga in Blue

The Palms: Underwater

(Continued from my previous post.) Last time I left off having trouble with getting both the ring (for the girlfriend) and a diving suit (apparently needed due to the kidnapping). The solution is off the verb list… LOOK, SEE, SEARCH, GO, ENTER, GET, TAKE, OPEN, DROP, PUT, EXIT, LEAVE, OFFER, GIVE, PUSH, PRESS, TALK, ASK, […]

(Continued from my previous post.)

Via a September 1983 review in LOGiN, showing the starting village.

Last time I left off having trouble with getting both the ring (for the girlfriend) and a diving suit (apparently needed due to the kidnapping). The solution is off the verb list…

LOOK, SEE, SEARCH, GO, ENTER, GET, TAKE, OPEN, DROP, PUT, EXIT, LEAVE, OFFER, GIVE, PUSH, PRESS, TALK, ASK, SET, BUY, PAY, KILL, STAB, FIGHT, ATTACK, USE, WITH, BREAK, CROSS, WADE, BOARD, THROW, SWIM, WEAR, REMOVE, PEEL, RUN, ESCAPE, CRY, SHOUT, YELL, TURN, WIPE, RUB, UNLOCK, RENT, INSERT, BORROW, MOVE, DRINK

…but unless I missed something (more likely than usual given the circumstances) it isn’t clued that this is even possible.

The right word is RENT. You can BUY RING and then RENT DIVINGSUIT and then move on from there. (The player starts with 95 credits; you can BUY DIVINGSUIT for 95 and not have any for the ring, but this causes the timed loss like avoiding giving the ring altogether eventually does.)

Immediately after the kidnapping, you can WEAR DIVINGSUIT and then go north into the water.

Before exploring, I wanted to highlight something that’s been showing on the images I haven’t pointed out yet: notice in the lower right there’s a N or a S. This is showing which way the player is facing. Just because the game is trying hard to be a Roberta Williams Hi-Res Adventure (and you’ll see more of this in a moment), doesn’t mean it went completely without other inspiration; I’m fairly certain the reason “facing direction” got added was influence from Micro Cabin Mystery House, which is done in a first-person view akin to Wizardry.

One other thing to highlight is that death has been ambiguous. Nearly all the adventure games we’ve seen (including the Japanese ones we have played) have been explicit about what has caused player death, and sometimes have been even gleeful about it, such that the main plot is in the death scenes (see: The Domes of Kilgari). For the early deaths, the game just cuts things short and gives the equivalent of a “keep going!” message (頑張ろう, that is, ganbaru) while warping the player back to the start.

The first time I died I thought maybe I got swept in the water, not that the girlfriend’s scene was timed. Maybe it’s not even meant as a death but a “time reverse”? Either way, part of my early confusion was just realizing what was wrong. The first event trigger (if you don’t enter the shop) allows some time; the second (enter the shop, but haven’t bought the ring) is short; the third (after you have the ring) gives a little more time again. After the kidnapping there’s yet another timer running for getting the DIVINGSUIT and going in (now fairly short, and again with no detail why you just lost).

Again, using the same vibe from Roberta Williams, we have a grid where only some of the squares are important. Again, I have mixed feelings on this; one surely would expect underwater to be big and contain some locations that are empty of anything more than fish.

Especially for a player of this era, just moving around an environment and seeing graphics change as you move can be an engrossing experience.

Still, the actual game effect is to make the player treat the map as a lawnmower, mopping up each square, sometimes using alternate lives if one dies for inexplicable reasons. Still, the density isn’t too bad; this is maybe halfway between Time Zone and The Dark Crystal in terms of number of “interesting” rooms. (To be clear, The Dark Crystal wasn’t out yet; I’m just trying to describe the feel.)

Heading immediately east is a knife. (If you haven’t noticed yet, all takeable items are drawn in a white square.)

Tracing around the border and heading due north, eventually (five turns later) you’ll find a skeleton with a bottle.

Keep turning and there’s a cave to the north; try to enter and you’ll get another one of those vague, unclear deaths. (Is it simply a trap to avoid? Will it work if I get a light because I’m bonking my head? Or is it more like a creature I can’t see?)

West and south from the above area is a RUIN. You can go in and find an altar with the Humming Bird Soft logo and a blue ring that looks like it matches the red ring. It looks like the kidnapping may have been due to magic afoot in the antique ring we bought, rather than coincidental circumstance.

South a bit and there’s a SHARK. Fortunately, the KNIFE picked up earlier works to KILL SHARK (it prompts with what, you need to type WITH KNIFE). If you just try to hang out with the shark, eventually you’ll die, and again — no description of being chomped, you just get told to MAKE MORE EFFORT.

With the shark out of the way you can see the thing behind, which is a SLATE. I think it is meant to deliver the clue we are supposed to SHOUT somewhere to scare something off?

This has been moving in a spiral, so let’s mop up the last “interesting” spot which is just north of the starting point; I haven’t been able to get anything to happen here but it does invoke the English word (ROCK) which seems like a hint something ought to happen.

Finally, spiraling a bit more, we arrive at a shipwreck.

Entering is one way (as far as I can tell, there may be some parser nonsense).

The layout ends up having five doors, three which can immediately be opened while using the nail remover. (The double room aspect is again reminiscent of Micro Cabin rather than Sierra.) To the immediate west of the entrance is an octopus (the knife doesn’t work this time, and before you ask, yelling/shouting doesn’t help either, we are in a diving suit though):

To the east is a dark room which the game refuses entry; in this case I assume it has to be a light source issue. (The text just says you can’t go that way.)

At the end of the hall the west and north doors don’t open, but the east one goes into a bar where you can find wine in a CABINET, but you’re still stuck (I can’t even get out of the bar, let alone the wrecked ship).

Despite the Japanese text, this does give me the vibe of a lost Sierra On-Line game, with the same quirks and absurdities. Roberta Williams was never afraid to describe deaths, though, but at least with a shark or octopus I can guess what happens.